是否可以根据存储在数据集列中的值创建文件名?我所追求的是:
/*
other code here, assume work.users looks like
user_id
ImageData
*/
data _null_;
set work.users;
file_name=cat('/home/me/', trim(user_id), '.jpg');
file file_name NOPRINT;
put ImageData;
run;
目前我正在尝试使用宏,但我没有运气。
答案 0 :(得分:8)
为此,您需要先创建file_name变量,然后在新数据步骤中使用filevar=
选项动态写入文件。
因此,首先在work.users
中创建file_name:
data work.users;
length file_name $255;
file_name=cats('/home/me',user_id,'.jpg');
run;
然后使用filevar =选项执行您要执行的操作:
data _null_;
set work.users;
file dummy filevar=file_name noprint;
put ImageData;
run;
请注意,dummy
在使用filevar=
方法时只是一个占位符。
答案 1 :(得分:1)
如果您想使用宏执行此操作:
data _null_;
set work.users;
call symput('filename', cats('/home/me/', user_id, '.jpg'));
run;
data _null_;
set work.users;
file "&filename." noprint;
put imagedata;
run;
然而,这假设在work.users
中只有一个观察,我猜这不是真的。如果要为每个观察输出一个文件,请将其滚动到一个宏中:
%macro writefile(n);
%do i = 1 %to &n;
data _null_;
i = &i;
set users point=i;
call symput('filename', cats('c:\temp\', user_id, '.txt'));
stop;
run;
data _null_;
i = &i;
set users point=i;
file "&filename." noprint;
put imagedata;
stop;
run;
%end;
%mend;
此处,参数& n是数据集中的观察数。您可以通过编程方式获取它,但目前只需将其手动传递给宏即可。