BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
Lorenzom
Calcite | Level 5

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.

1 ACCEPTED SOLUTION

Accepted Solutions
LinusH
Tourmaline | Level 20

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...

Data never sleeps

View solution in original post

3 REPLIES 3
LinusH
Tourmaline | Level 20

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...

Data never sleeps
Lorenzom
Calcite | Level 5

Thank you very much.

With select format now works.... you are the best.

Thank you again.

Loko
Barite | Level 11

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: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 2312 views
  • 4 likes
  • 3 in conversation