楼主: 456852
1945 6

[原创博文] 求助,整理数据的问题 [推广有奖]

  • 0关注
  • 3粉丝

博士生

86%

还不是VIP/贵宾

-

威望
0
论坛币
71 个
通用积分
0.0012
学术水平
6 点
热心指数
10 点
信用等级
4 点
经验
12608 点
帖子
193
精华
0
在线时间
512 小时
注册时间
2009-1-18
最后登录
2017-8-12

楼主
456852 发表于 2009-11-17 10:45:11 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
现在我有的数据如下:
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,事成给钱。
二维码

扫码加我 拉你入群

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

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

关键词:整理数据 bottle Touch eboo note

回帖推荐

jingju11 发表于2楼  查看完整内容

1# 456852 拿钱来。

本帖被以下文库推荐

沙发
jingju11 发表于 2009-11-17 13:11:31
1# 456852


  1. proc transpose data =UrData out =new1 prefix ='wash#'n;
  2. by ind; var wash;
  3. proc transpose data =UrData out =new2 prefix ='soap#'n;
  4. by ind; var soap;
  5. proc transpose data =UrData out =new3 prefix ='touch_1#'n;
  6. by ind; var touch_1;
  7. data new;
  8. merge new1 new2 new3; by ind;
  9.    drop _name_;
  10. run;
复制代码


拿钱来。

藤椅
456852 发表于 2009-11-17 13:51:57
我现在变量有很多个,超过30,不止这3个,手动的写肯定不行。

板凳
xiaosanmao 发表于 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;

报纸
jingju11 发表于 2009-11-18 04:59:56
3# 456852

  1. data a;
  2. input ind    wash  soap     touch_1 &$15.@@;
  3. cards;
  4. 99101    2        0           noteboo
  5. 99101    2        0           bottle
  6. 99102    2        0           child a
  7. 99102    1        1            noteboo
  8. 99102    2        0            toys
  9. 99102    2        0            child a
  10. 99103    2        0            child a
  11. 99103    1        1           noteboo
  12. 99104    3        3           bottle
  13. 99104    1        1           Food co
  14. 99104    2        0           self (n
  15. ;run;
  16. proc contents data =a out =b(where =(upcase(name) ^='IND')) noprint; run;
  17. proc sql noprint ;
  18. select name into :NameList  separated by ' ' from b;
  19. quit;
  20. %macro cMcr;
  21. %local i dsets;
  22. %let i =1; %let dsets =;
  23. %do%while(%scan(&NameList, &i) ^=);
  24.   %let var =%scan(&NameList, &i);
  25.   proc transpose data =a out =new&i prefix =&var.;
  26.    by ind; var &var.;
  27.   run;
  28.   %let dsets =&dsets new&i;
  29.   %let i =%eval(&i+1);
  30. %end;
  31. data final; merge &dsets; by ind; run;
  32. quit;
  33. %mend cMcr;
  34. %cMcr
  35. ;
复制代码
拿钱来!!!另外,我觉得你很挑剔呢。三十几个变量一个一个写也没有多少。太懒了。

地板
willypan 发表于 2009-11-18 10:08:15
5# jingju11 强的!

7
lwien007 发表于 2009-11-18 20:04:57
    1. data tmp;
    2. input ind wash soap touch_1:&$ 20. ;
    3. datalines;
    4. 99101 2 0 noteboo
    5. 99101 2 0 bottle
    6. 99102 2 0 child a
    7. 99102 1 1 noteboo
    8. 99102 2 0 toys
    9. 99102 2 0 child a
    10. 99103 2 0 child a
    11. 99103 1 1 noteboo
    12. 99104 3 3 bottle
    13. 99104 1 1 Food co
    14. 99104 2 0 self (n
    15. ;
    16. run;
    17. %macro trans(fname,type);
    18. proc transpose data=&fname out=tmp2 name=t;
    19. by ind notsorted;
    20. var _&type._;
    21. run;
    22. proc transpose data=tmp2 out=tmp2_2 ;
    23. by ind t notsorted;
    24. var col:;
    25. run;
    26. data tmp2_21;
    27. set tmp2_2;
    28. by ind t notsorted;
    29. if first.t then sum=0;
    30. sum+1;
    31. t=cat(compress(t),compress(sum));
    32. run;
    33. proc transpose data=tmp2_21 out=&type;
    34. by ind notsorted;
    35. id t;
    36. var col1;
    37. run;
    38. %mend trans;
    39. %trans(tmp,character)
    40. %trans(tmp,numeric)
    41. data last(drop=ind1-ind4 _name_);
    42. merge numeric character;
    43. by ind;
    44. run;
    复制代码

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-5 19:46