diff --git a/all.sas b/all.sas index d6baea6..25b004e 100644 --- a/all.sas +++ b/all.sas @@ -5539,11 +5539,11 @@ filename &fref1 clear; @param ds The dataset from which to obtain column metadata @param outds= (work.cols) The output dataset to create. Sample data: - |NAME $|LENGTH 8|VARNUM 8|LABEL $|FORMAT $49|TYPE $1 |DDTYPE $| - |---|---|---|---|---|---|---| - |AIR|8|2|international airline travel (thousands)|8.|N|NUMERIC| - |DATE|8|1|DATE|MONYY.|N|DATE| - |REGION|3|3|REGION|$3.|C|CHARACTER| +|NAME:$32.|LENGTH:best.|VARNUM:best.|LABEL:$256.|FMTNAME:$32.|FORMAT:$49.|TYPE:$1.|DDTYPE:$9.| +|---|---|---|---|---|---|---|---| +|`AIR `|`8 `|`2 `|`international airline travel (thousands) `|` `|`8. `|`N `|`NUMERIC `| +|`DATE `|`8 `|`1 `|`DATE `|`MONYY `|`MONYY. `|`N `|`DATE `| +|`REGION `|`3 `|`3 `|`REGION `|` `|`$3. `|`C `|`CHARACTER `|

Related Macros

@li mf_getvarlist.sas @@ -5555,26 +5555,27 @@ filename &fref1 clear; **/ %macro mp_getcols(ds, outds=work.cols); - +%local dropds; proc contents noprint data=&ds out=_data_ (keep=name type length label varnum format:); run; -data &outds(keep=name type length varnum format label ddtype); - set &syslast(rename=(format=format2 type=type2)); +%let dropds=&syslast; +data &outds(keep=name type length varnum format label ddtype fmtname); + set &dropds(rename=(format=fmtname type=type2)); name=upcase(name); if type2=2 then do; length format $49.; - if format2='' then format=cats('$',length,'.'); - else if formatl=0 then format=cats(format2,'.'); - else format=cats(format2,formatl,'.'); + if fmtname='' then format=cats('$',length,'.'); + else if formatl=0 then format=cats(fmtname,'.'); + else format=cats(fmtname,formatl,'.'); type='C'; ddtype='CHARACTER'; end; else do; - if format2='' then format=cats(length,'.'); - else if formatl=0 then format=cats(format2,'.'); - else if formatd=0 then format=cats(format2,formatl,'.'); - else format=cats(format2,formatl,'.',formatd); + if fmtname='' then format=cats(length,'.'); + else if formatl=0 then format=cats(fmtname,'.'); + else if formatd=0 then format=cats(fmtname,formatl,'.'); + else format=cats(fmtname,formatl,'.',formatd); type='N'; if format=:'DATETIME' or format=:'E8601DT' then ddtype='DATETIME'; else if format=:'DATE' or format=:'DDMMYY' or format=:'MMDDYY' @@ -5586,7 +5587,8 @@ data &outds(keep=name type length varnum format label ddtype); end; if label='' then label=name; run; - +proc sql; +drop table &dropds; %mend mp_getcols;/** @file mp_getconstraints.sas @brief Get constraint details at column level diff --git a/base/mp_getcols.sas b/base/mp_getcols.sas index d529513..0b34425 100644 --- a/base/mp_getcols.sas +++ b/base/mp_getcols.sas @@ -14,11 +14,11 @@ @param ds The dataset from which to obtain column metadata @param outds= (work.cols) The output dataset to create. Sample data: - |NAME $|LENGTH 8|VARNUM 8|LABEL $|FORMAT $49|TYPE $1 |DDTYPE $| - |---|---|---|---|---|---|---| - |AIR|8|2|international airline travel (thousands)|8.|N|NUMERIC| - |DATE|8|1|DATE|MONYY.|N|DATE| - |REGION|3|3|REGION|$3.|C|CHARACTER| +|NAME:$32.|LENGTH:best.|VARNUM:best.|LABEL:$256.|FMTNAME:$32.|FORMAT:$49.|TYPE:$1.|DDTYPE:$9.| +|---|---|---|---|---|---|---|---| +|`AIR `|`8 `|`2 `|`international airline travel (thousands) `|` `|`8. `|`N `|`NUMERIC `| +|`DATE `|`8 `|`1 `|`DATE `|`MONYY `|`MONYY. `|`N `|`DATE `| +|`REGION `|`3 `|`3 `|`REGION `|` `|`$3. `|`C `|`CHARACTER `|

Related Macros

@li mf_getvarlist.sas @@ -30,26 +30,27 @@ **/ %macro mp_getcols(ds, outds=work.cols); - +%local dropds; proc contents noprint data=&ds out=_data_ (keep=name type length label varnum format:); run; -data &outds(keep=name type length varnum format label ddtype); - set &syslast(rename=(format=format2 type=type2)); +%let dropds=&syslast; +data &outds(keep=name type length varnum format label ddtype fmtname); + set &dropds(rename=(format=fmtname type=type2)); name=upcase(name); if type2=2 then do; length format $49.; - if format2='' then format=cats('$',length,'.'); - else if formatl=0 then format=cats(format2,'.'); - else format=cats(format2,formatl,'.'); + if fmtname='' then format=cats('$',length,'.'); + else if formatl=0 then format=cats(fmtname,'.'); + else format=cats(fmtname,formatl,'.'); type='C'; ddtype='CHARACTER'; end; else do; - if format2='' then format=cats(length,'.'); - else if formatl=0 then format=cats(format2,'.'); - else if formatd=0 then format=cats(format2,formatl,'.'); - else format=cats(format2,formatl,'.',formatd); + if fmtname='' then format=cats(length,'.'); + else if formatl=0 then format=cats(fmtname,'.'); + else if formatd=0 then format=cats(fmtname,formatl,'.'); + else format=cats(fmtname,formatl,'.',formatd); type='N'; if format=:'DATETIME' or format=:'E8601DT' then ddtype='DATETIME'; else if format=:'DATE' or format=:'DDMMYY' or format=:'MMDDYY' @@ -61,5 +62,6 @@ data &outds(keep=name type length varnum format label ddtype); end; if label='' then label=name; run; - +proc sql; +drop table &dropds; %mend mp_getcols; \ No newline at end of file diff --git a/tests/crossplatform/mp_getcols.test.sas b/tests/crossplatform/mp_getcols.test.sas index eb0ef7d..bdad790 100644 --- a/tests/crossplatform/mp_getcols.test.sas +++ b/tests/crossplatform/mp_getcols.test.sas @@ -4,6 +4,7 @@

SAS Macros

@li mp_getcols.sas + @li mp_assertcols.sas @li mp_assertcolvals.sas @li mp_assertdsobs.sas @@ -30,4 +31,10 @@ run; checkvals=work.check.val, desc=All values have a match, test=ALLVALS +) + +%mp_assertcols(work.info, + cols=name type length varnum format label ddtype fmtname, + test=ALL, + desc=check all columns exist ) \ No newline at end of file