SAS,从数据集列创建文件名

时间:2011-03-04 04:03:17

标签: sas

是否可以根据存储在数据集列中的值创建文件名?我所追求的是:

/* 
   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;

目前我正在尝试使用宏,但我没有运气。

2 个答案:

答案 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是数据集中的观察数。您可以通过编程方式获取它,但目前只需将其手动传递给宏即可。