I am getting this error: Syntax error while parsing WHERE clause.
while running the below code, kindly help:
%macro abc;
data null;
set newdata;
%Do %until(100);
call symput ('SLP', SLP);
call execute
(
'proc imstat' || ' data = ' || ' LASRLIB.scans ' || ';' ||
'where ' || put(SCANDATE, date7.) || '=' || "07FEB19" || ';' ||
' run; ' ||
' deleterows / purge ;' ||
' run;'
);
%end;
Well, your problem lies in:
put(SCANDATE, date7.) =
When scandate is put into text, there will be a numeric as first character, this is not valid in SAS. Maybe you mean:
'where "' || put(SCANDATE, date7.) || '"=' || "07FEB19" || ';' ||
Although I really don't see why you have that code at all, there really is a better way than creating SLP macro variable and generating the proc imstat code 100 times - which is all that code is doing, there is nothing changing in the code as far as I can see any of the 100 iterations. So does not make sense in any way.
As a secondary issue, there is nothing about this %DO loop that causes it to execute 100 times. It executes once per observation in NEWDATA.
It's difficult to determine what you intended here by adding the %DO loop. Perhaps:
set newdata (obs=100);
Finally, note the possibility to simplify by combining a few character strings:
'="07FEB19"; run;'
In fact, your intention may have been to combine more than that:
'proc imstat data=LASRLIB.scans; where put(SCANDATE, date7.)="07FEB19"; run;'
Some issues are not clear ... where did you intend to use &SLP? Where does SCANDATE come from?
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
See how to use one filter for multiple data sources by mapping your data from SAS’ Alexandria McCall.
Find more tutorials on the SAS Users YouTube channel.