Dear All.
I've a big question.
I'm using SAS 9.3, I've a Macr that I use to check the formats of each variable in a dataset.
This is the Macro:
%macro check_format(lib, ds, var, comp);
proc sql noprint;
select informat into: fLength
from dictionary.columns
where libname = upcase("&lib") and memname = upcase("&ds") and upcase(name) = upcase("&var");
quit;
run;
%put This is fLength;
%put &fLength.;
%if (&comp ^= &fLength) %then %do;
data _null_;
put "ERROR: Format of &var is not = &comp, is &fLength ";
call symput('content_check_STOP','1');
run;
%end;
%mend check_format;
If I use this Macro with these paramenters doesn't work:
%check_format(&lib, &dsInOut, SMPLDATE, yymmddn8.);
or:
%check_format(&lib, &dsInOut, SMPLTIME, tod5.);
but the dataset format is correct.
The error that i get is:
ERROR: Format of SMPLDATE is not = yymmddn8., is
It seems that select informat returns ''.
Could you please help me? Thank you very much.
You say "format is correct", but you are selecting informat....?
Classic troubleshooting, best done by yourself.
Take the SQL, run it outside your macro, put the result in a table instead of macro variable etc...
You say "format is correct", but you are selecting informat....?
Classic troubleshooting, best done by yourself.
Take the SQL, run it outside your macro, put the result in a table instead of macro variable etc...
Thank you very much.
With select format now works.... you are the best.
Thank you again.
hello,
the sql returns CAPITAL LETTERS - YYMMDDN8. therefore you need to compare the same things.
You have 2 options:
1) either change the macro - %if (%upcase(&comp) ^= &fLength) %then %do;
or
2) call the macro with capital letters for the last variable
%check_format(&lib, &dsInOut, SMPLDATE, YYMMDDN8.);
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.