全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2053 6
2009-11-17
现在我有的数据如下:
ind         wash soap     touch_1
99101    2        0           noteboo
99101    2        0           bottle
99102    2        0           child a
99102    1        1            noteboo
99102    2         0            toys
99102    2        0            child a
99103    2         0            child a
99103    1        1           noteboo
99104    3        3           bottle
99104    1        1           Food co
99104    2        0           self (n
。。。
数据全都按照ind排过序。
现在要整合成如下表:
ind         wash#1 soap#1 touch_1#1   wash#2 soap#2  touch_1#2 wash#3 soap#3  touch_1#3  wash#4 soap#4  touch_1#4....
99101    2            0           noteboo       2            0           bottle          .             .             .                .              .             .
99102    2            0           child a         1            1             noteboo       2             0            toys           2             0            child a
99103    2             0            child a         1            1           noteboo      .              .             .                .               .           .
.....
其实就是新建变量,做成一行一个ind的表,请大家帮忙,写下code,事成给钱。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2009-11-17 13:11:31
1# 456852

复制代码


拿钱来。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2009-11-17 13:51:57
我现在变量有很多个,超过30,不止这3个,手动的写肯定不行。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2009-11-17 22:21:25
变量是不允许含 # 的
----------------------
data a;
input ind$    wash$  soap$     touch_1 &$15.@@;
cards;
99101    2        0           noteboo
99101    2        0           bottle
99102    2        0           child a
99102    1        1            noteboo
99102    2        0            toys
99102    2        0            child a
99103    2        0            child a
99103    1        1           noteboo
99104    3        3           bottle
99104    1        1           Food co
99104    2        0           self (n
;run;
data b;set a(drop=ind);run;
proc sql noprint ;
create table vars as
select varnum,name
from dictionary.columns
where memname='B';
select count(distinct(name))
into: mark from vars;
quit;
%macro ca;
data _null_;                              
set vars;                                 
call symput ('n',_n_);                    
call symput (compress('ca'||_n_),name);
run;  
%do i=1 %to &mark;
proc transpose data =a
out=new&i(drop=_name_) prefix=&&ca&i ;
by ind; var &&ca&i;
%end;
run;
data tmp;
merge %do i=1 %to &mark;
new&i
%end;
;by ind;
run;
%mend;
%ca;
data c;set tmp(drop=ind);run;
proc sql noprint;
create table vars1 as
select varnum,name
from dictionary.columns
where memname='C';
quit;
data vars2;set vars1;l=length(name);
z=substr(name,l,1);run;
proc sort data=vars2;by z varnum;run;
data vars3;set vars2;keep name;run;
%macro ba;                             
data _null_;                              
set vars3;                                 
call symput ('n',_n_);                    
call symput (compress('co'||_n_),name);
run;  
proc sql noprint;
select count(*) into:n1 from vars3;
quit;
data s;
array  v(*) _char_ ind v1-v%eval(&n1);
%do i=1 %to &n1;
%end;
run;
data s1;
set s;
_ind=trim(ind);
%do i=1 %to &n1;
_v&i=trim(v&i);
drop v&i ind;
rename _ind=ind _v&i=v&i;
%end;
run;
data s2;
set s1;
%do i=1 %to &n1;
rename v&i=&&co&i;
%end;
data s3;
set s2 tmp;
run;
data final ;set s3(firstobs=2);run;
proc print data=final;run;
%mend;
%ba;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2009-11-18 04:59:56
3# 456852
复制代码
拿钱来!!!另外,我觉得你很挑剔呢。三十几个变量一个一个写也没有多少。太懒了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2009-11-18 10:08:15
5# jingju11 强的!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群