DATA Step, Macro, Functions and more

Check format with date

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 9
Accepted Solution

Check format with date

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.


Accepted Solutions
Solution
‎01-23-2015 06:47 AM
Super User
Posts: 5,437

Re: Check format with date

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


All Replies
Solution
‎01-23-2015 06:47 AM
Super User
Posts: 5,437

Re: Check format with date

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
Occasional Contributor
Posts: 9

Re: Check format with date

Thank you very much.

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

Thank you again.

Super Contributor
Posts: 308

Re: Check format with date

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


🔒 This topic is solved and locked.

Need further help from the community? Please ask a new question.

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