the - sas vuelos
SAS, crea el nombre de archivo de la columna del conjunto de datos (2)
Para hacer esto, primero deberá crear la variable filevar=
, y luego podrá usar la opción filevar=
en un nuevo paso de datos para escribir dinámicamente en los archivos.
Entonces, primero crea work.users
en work.users
:
data work.users;
length file_name $255;
file_name=cats(''/home/me'',user_id,''.jpg'');
run;
Luego haz lo que tratas de hacer usando la opción filevar =:
data _null_;
set work.users;
file dummy filevar=file_name noprint;
put ImageData;
run;
Tenga en cuenta que el dummy
es solo un marcador de posición cuando se utiliza el método filevar=
.
¿Es posible crear un nombre de archivo a partir de un valor almacenado en una columna de conjunto de datos? Lo que busco es algo como:
/*
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;
en este momento estoy tratando de hacerlo con macros, pero no estoy teniendo suerte.
Si quieres hacer esto con macros:
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;
Sin embargo, esto supone que solo hay una observación en work.users
, que supongo que no es cierta. Si desea generar un archivo para cada observación, gírelo en una macro:
%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;
Aquí, el argumento & n es el número de observaciones en su conjunto de datos. Puede obtenerlo programáticamente, pero es más fácil para los propósitos actuales simplemente pasarlo manualmente a la macro.