loops sas sas-iml

loops - Bucle sobre los nombres en SAS-IML?



(2)

La forma más fácil que se me ocurre para hacer esto es usar alguna sintaxis que no sea IML. PROC SQL, por ejemplo, puede generar listas de variables macro.

%let stem=class_; data class_s1 class_s2; set sashelp.class; run; data suffices; input suffix $; datalines; s1 s2 ;;;; run; %macro use_suffix(suffix=); use &stem.&suffix.; read all into &stem.&suffix.; print &stem.&suffix.; %mend use_suffix; proc sql; select cats(''%use_suffix(suffix='',suffix,'')'') into :suffixlist separated by '' '' from suffices; quit; proc iml; &suffixlist; quit;

¿Cómo puedo leer un SAS-Dataset con un nombre dado como raíz + sufijo en IML? La raíz se da como una macrovariable SAS, lo suficiente que pretendo usar están en un vector de cadena en IML.

En RI usaría

suffix<-c(''s1'',''s2'') for (s in suffix){ data<-eval(as.name(paste(stem,s,sep=''''))) }

Podría hacer el bucle si tuviera el código para el primer conjunto de datos. Lo intenté:

proc iml; suffices = {''s1'',''s2''}; call symput(''suffix'',suffices[1]); use &stem.&suffix.;

El problema es que si en un do-loop (y lo necesito como bucle sobre los nombres), call symput realmente no funciona. Aquí encontré el símbolo, pero en el contexto de uso & stem.symget (''sufijo'') no fue fructífero.

¿Alguna otra idea?

Editar: Encontré la siguiente solución bastante poco elegante:

proc iml; %global suff; suffix={''s1'',''s2'',''s3''}; %do ii = 1 %to 3; call symput(''suff'',suffix[&ii.]); <do stuff based on the suffix> %end;

Aún así, no creo que esta sea la manera en que se supone que uno debe trabajar en ello.