- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
No.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Thanks Kurt
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Yes, thanks. Looks like there are two workarounds, However, Kurt's code works better with variable filename lengths.