SAS, создать имя файла из столбца набора данных - PullRequest
4 голосов
/ 04 марта 2011

возможно ли создать имя файла из значения, хранящегося в столбце набора данных? То, что я хочу, это что-то вроде:

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

8 голосов
/ 04 марта 2011

Для этого вам нужно сначала создать переменную file_name, а затем вы можете использовать опцию filevar= на новом шаге данных для динамической записи в файлы.

Итак, сначала создайте имя файла в work.users:

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 голос
/ 04 марта 2011

Если вы хотите сделать это с макросами:

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 - это количество наблюдений в вашем наборе данных. Вы можете получить его программно, но для текущих целей проще просто передать его в макрос.

...