data wide_array;
set long_sort;
by famid;/*排序 数据集wide_array 按照FAMID*/
retain faminc96-faminc98;/*初始化三个变量*/
array Afaminc(96:98) faminc96-faminc98;/*定义一个数组,包括了三个变量名*/
if first.famid then do;/*如果按照FAMID分组排序,每一组的第一个观测对象,对这个观测对象的faminc96-faminc98三个变量赋予缺失值,是通过数组的循环实现的*/
do i = 96 to 98;
Afaminc = .;/*改成Afaminc(i) = .;*/
end;
end;
Afaminc(year) = faminc; /*对faminc96-98三个变量赋值为FAMINC的值,这个时候有些观测对象的这三个变量值为缺失值,正好类似一个对角矩阵*/
if last.famid then output; /*输出每一个组的最后一个观测,因为最后一个观测是全的,没有缺失,楼主可以先吧drop year faminc i 这句话去掉看看结果,然后再去掉这行,看看*/
drop year faminc i;
run;
proc print data=wide_array noobs;
run;


雷达卡







京公网安备 11010802022788号







