/*请教sas程序,假设有下列数据,这是双向关系数据表,
本应该是n*n的数据模式,但因为数据问题,导致列变量缺少,
现在想做的是把他变成N*n的形式,也就是添加a1,a5,a6,a8,a9,a12,a13列,
数值可以直接设为0。这个数据表我列的比较简单,真实的数据是行有200+,
列有100+,所以手工添加列变化过于复杂,恳请各位指教,谢谢!*/
/*解决实际问题之填补缺失的列变量*/
data nm;
input name $ a2 a3 a4 $ a7;
cards;
a1 . 0 c 0
a2 . 0.23 c 0
a3 c 0 c 0
a4 . 0 c 0
a5 . 0 c 0
a6 . 0 c 1
a7 . 0 c 1
;
/*取列变量name所有的值*/
proc sql noprint;
select name into :rowname separated by ' '
from nm;
quit;
%put &rowname;
/*删除列变量名name*/
data nm1;
set nm;
drop name;
run;
/*取列变量名在行变量名(总集)的缺失变量值*/
proc contents data=nm1 out=list;run;
proc sql noprint;
create table short as
select name
from nm
where name not in (select name from list);
quit;
/*将缺失变量名赋值给宏变量*/
proc sql noprint;
select name into :shortname separated by ' '
from short;
quit;
%put &shortname;
/*讲新增变量(缺失变量)赋值为0*/
data nn;
set nm;
retain &shortname 0;
run;
/*排序和观测变量名一致,即得到NxN方阵(矩阵)*/
data nn;
retain name &rowname;
set nn;
run;
|