http://www.pinggu.org/bbs/thread-888061-1-1.html原程序在这里
data a2;
num=0;
do _n_=1 by 1 until(last._col0);
set a1;
by _col0;
num+1;
output;
end;
run;
proc sql;
select max(num) into : obs
from a2;
quit;
%macro aa();
data a3;
do i=1 by 1 until(last._col0);
set a1;
by _col0;
array m(*) m1-m%left(&obs.);
m(i)=rate3_change;
end;
drop i rate3_change;
run;
%mend;
%aa;
这个哥们先后用转置和数据实现了按照要求读入数据并实现既定的数据集格式
先分析这个哥们的程序:
1.建立数据集A1,并进行排序,为后面的SET做一个准备
2.在建立数据集A2的时候,设置一个变量NUM,这个变量是表示有每一_COLO重复的次数,这个很关键,因为后面就是根据重复的次数来设置数组的。
3.将每一个_COLO重复的次数的变量NUM,用SQL赋值给一个宏变量,然后作为数组的界值,而且随着_n_的不同,引起的NUM不同,导致数组的界值不同,因为相同的_COLO的rate3_change能在一个观测里体现出来。
这个里面最关键的是寻找宏循环中数组的界值与_COLO重复次数,用了一个NUM和宏变量&obs.
值得学习的一点