Changes in version 1.4.1 (2026-04-04) - Significant performance enhancements to datastep(). 83K rows now runs in 21.6 seconds instead of 6.7 minutes, which is a 94.6% improvement. - Allow wildcard on "keep" and "drop" parameters for datastep(). - Significant package size reduction from 2.6MG to 745KB. Changes in version 1.3.9 (2025-01-12) - Removed some test data to reduce size of package. Changes in version 1.3.8 (2024-12-13) - Moved 'nanoparquet' to suggested instead of imports. Changes in version 1.3.7 (2024-11-06) - Added 'parquet' file format to libname() function. - Added 'subset' parameter to datastep() function to filter the data on input. - Added DATA NULL capability to datastep() function. Changes in version 1.3.4 (2024-07-19) - Fixed issue where libname() was failing on empty dataset. Changes in version 1.3.3 (2024-05-25) - Fixed issue where lib_write() was not detecting changes to datasets in libname. Changes in version 1.3.2 (2024-04-16) - Fixed bug on libname() when there are file names with multiple dots. Changes in version 1.3.1 (2024-03-07) - Fixed bug on datastep() when running in source.all(). Changes in version 1.3.0 (2024-02-11) - Fixed bug on sas7bdat where class on date columns was being stripped. - Fixed bug on datastep() where expression that was removing input dataset attributes (like labels). Changes in version 1.2.9 (2023-11-17) - Fixed bug on datastep() when there are spaces in the column names and output() function is used. - Some improvements to datastep() performance. - Send message on writing "sas7bdat" that functionality is not available. - Added where clause parameter to libname(). - Added automatic variables "first.X" and "last.X" for each by variable. Changes in version 1.2.8 (2022-09-08) - Fixed bug on datastep that sometimes was causing variables to lose their attributes. - Added "where" parameter to datastep. - Fix bug on datastep that was causing a single variable dataframe to be returned as a vector. - Cleared rownames on datastep exit. - Added "MaxChar" column to dictionary to hold the maximum number of characters for a data value in the column. This is different from "width" which is the user-defined, proscribed width. MaxChar is the actual width with no padding. - Added "rda" engine to libname. - Allowed single value NSE on drop, keep, and by parameter of datastep(). For multiple values, use the v() function. - Added output() function to datastep. - Improved datastep output column ordering. New variables were coming out in the opposite order they were added. Now they are better. - Added "set" parameter to datastep. - Added "merge", "merge_by", and "merge_in" parameter to datastep(). - Fixed bug on datastep() rename. - Added/fixed documentation. - Updated logo. Changes in version 1.2.5 (2022-08-08) - BREAKING CHANGE: Removed the %eq% operator from this package, as it has been moved to the common package. A dependency on common has been added to the libr package so that the %eq% operator will be loaded and available. However, it is still possible some changes may be required to make the new location for the %eq% operator work properly. - Apply "format" parameter on datastep() to both input and output dataset. Changes in version 1.2.3 (2022-06-23) - Added "Rdata" option to libname() function engines. - Added "label" parameter to datastep() function. - Added "format" parameter to datastep() function. - Added lib_export() function to export a library to a different directory and file format. - Fixed bug on dictionary() that was causing a warning when there were no rows on the input data frame. Changes in version 1.2.2 (2021-11-22) - Added FAQ and Complete Examples - Fixed bug on dictionary() when encountering datetime variable with multiple POSIX classes. Changes in version 1.2.1 (2021-10-09) - Added covr and codecov - Fixed bug on dictionary() function that wasn't showing width attribute. - Fixed bug on datastep() when applying attributes to a calculated variable. - Small documentation fixes. Changes in version 1.2.0 (2021-06-29) - Made package compatible to R version 3.6. - Added GitHub actions to test previous versions of R. - Increased performance of datastep() function generally. Benchmarks show about 40% improvement on average. - Added standard_eval parameter to libname() and lib_copy() functions to allow user to pass library names as a variable. - Added quiet parameter on libname() function to minimize console output if desired. - Added arrays parameter and dsarray() class to handle data step arrays. This functionality allows iteration across a list of variables inside a datastep(). - Added attributes parameter and dsattr() class to handle data step attributes. This functionality allows the user to add attributes to datastep variables. - Fixed bug in datastep() where it was stripping column attributes on Base R data frames. Changes in version 1.1.3 (2021-02-08) - Fixed bug on datastep when data frame/tibble had a single column. Changes in version 1.1.1 (2021-01-06) - Integrated libr with logr. All library functions will automatically provide logging entries if the autolog feature of the logr package is enabled. - Added pkgdown site. - Added filter parameters to libname() and lib_load() functions. The filter parameter allows the user to specify which data from the library they want loaded into memory. - Changed default "na" parameter on csv export to empty string instead of NA to accommodate import into SAS. SAS couldn't deal with the NA strings. - Fixed bug in dbf engine when outputting tibbles. - Fixed bug in %eq% operator when comparing objects with different numbers of classes. - Greatly improved performance of datastep, especially on grouped tibbles. Changes in version 1.0.1 (2020-12-09) A package to create data libraries, data dictionaries, and the ability to perform a data step. The major functions are: - libname() function creates a data library - dictionary() function creates a data dictionary - datastep() function steps through data row-by-row - %eq% allows comparison of any two R objects without error The packages also contains a variety of functions to manipulate data libraries: - lib_load(): Loads a library into the workspace - lib_unload(): Unloads a library from the workspace - lib_sync(): Synchronizes the workspace with the library list - lib_write(): Writes library data to the file system - lib_add(): Adds data to a library - lib_replace(): Replaces data in a library - lib_remove(): Removes data from a library - lib_copy(): Copies a data library - lib_delete(): Deletes a data library - lib_info(): Returns a data frame of information about the library - lib_path(): Returns the path of a data library - lib_size(): Returns the size of the data library in bytes - specs(): Create a collection of import specifications - import_spec(): Define an import specification for a file