比如b表:
变量名 var1 var2 var3 var4
第一行 1.1 1.2 1.3 1.4
变成a表:
变量名 varname value
第一行 var1 1.1
第二行 var2 1.2
第三行 var3 1.3
第四行 var4 1.4
现在我要把它变成竖着的,程序如下。
- %macro test;
- proc contents data=b out=c;
- proc sql noprint;
- select name
- into :vlist separated by ' '
- from c
- where varnum>3
- order by varnum;
- quit;
- data a(keep=varname value);
- format varname $50.;
- format value 15.12;
- set b
- %do x=1 %to 99; /*vlist变量装了b表中所有的变量名,以空格间隔*/
- %let string=%scan(&vlist, &x);
- %if %length(&string) ne 0 %then /* 搜索vlist串,每个单独的词都是一个变量名*/
- %do;
- varname='&string'; /* 问题出在这里了,为啥单引号里的&string他不自动解析成'var1' 'var2' 'var3'?而还是'&string2',我的新表格里所有的varname都是'&string2'*/
- value=&string;
- output;
- %end;
- %else %goto done;
- %end;
- %done:run;
- %mend test;




雷达卡


京公网安备 11010802022788号







