Is it possible to insert a macro variable into CARDS lines. For example, suppose I have a date variable (MO_YEAR) with a value of "08-2023' that I want to insert into the pdf file names to make the filename dynamic each month
data W47XXFM;
input file_name $ : 20.;
cards;
test.pdf
test1.pdf
test2.pdf
;
run;
such that when run, the file names in data W47XXFM resolve to:
08-2023 test.pdf
08-2023 test1.pdf
08-2023 test2.pdf
Thanks
It is not possible to use macro triggers in CARDS/DATALINES.
But you can write the DATA step containing the CARDS to a temporary file and %INCLUDE that, or incorporate the macro variable in the code:
%let macvar = 08-2023;
data W47XXFM;
length file_name $20;
input file_name $20.;
file_name = "&macvar." !! file_name;
cards;
test.pdf
test1.pdf
test2.pdf
;
What happens, when you try it? Have you read the documentation of CARDS? Hint: https://documentation.sas.com/doc/de/pgmsascdc/9.4_3.5/mcrolref/p10yr6jbpc8t6dn1xurxomzg37fl.htm
No.
It is not possible to use macro triggers in CARDS/DATALINES.
But you can write the DATA step containing the CARDS to a temporary file and %INCLUDE that, or incorporate the macro variable in the code:
%let macvar = 08-2023;
data W47XXFM;
length file_name $20;
input file_name $20.;
file_name = "&macvar." !! file_name;
cards;
test.pdf
test1.pdf
test2.pdf
;
Thanks Kurt
Is below what you're asking for?
%let mo_year=08-2023;
data demo;
input file_name $40.;
file_name=resolve(file_name);
cards;
&mo_year test.pdf
&mo_year test1.pdf
&mo_year test2.pdf
;
proc print data=demo;
run;
Yes, thanks. Looks like there are two workarounds, However, Kurt's code works better with variable filename lengths.
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.