楼主: handsome0611
1691 5

[问答] 数据整理的问题 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

56%

还不是VIP/贵宾

-

威望
0
论坛币
569 个
通用积分
2.8500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1218 点
帖子
56
精华
0
在线时间
219 小时
注册时间
2010-2-15
最后登录
2023-6-12

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

x1

x2x3

1010758631

B2094757D169AAFA419C

1010758631

B2094654D06EAAFD4299

1012379795

B2094654D269A6FB4598

1013933125

B2094654D065A7FC4392

1013933125

B2094654D065A0FB4292

1013933125

B2094654D16AAAFF4998

1014253944

B2094654D065ABF84792

1015097147

B2094654D068A6F4469C

1015097147

B2094654D06FA3FC4899

1015097147

B2094654D065A7FC4392

1015097147

B2094654D065A7FE489B

1015097147

B2094757D069A3F54192

1

1015097147

B2094757D165A3F5479D

A0数据集三列分别是X1 X2 X3。想生成新的数据集A1(两列)。X3=1的X2和它之前的相同X1下的X2配对(1对多组合,X3=1的X2重复)。在新集中,第一列为A0中X3=1的X2,第二列为X3=1之前的相同X1下的X2大概如下:
B2094757D069A3F54192B2094654D065A7FE489B
B2094757D069A3F54192B2094654D065A7FC4392
B2094757D069A3F54192B2094654D06FA3FC4899
B2094757D069A3F54192B2094654D068A6F4469C
code不会写,求教各位大神~~~
二维码

扫码加我 拉你入群

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

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

关键词:数据整理 code 数据集 FA3 ODE

沙发
intheangel 学生认证  发表于 2014-5-14 22:40:16 |只看作者 |坛友微信交流群
真是各种各样的问题都有呢~~不知道自己在写什么,只有一个1的时候可以用;
  1. data x;
  2. infile cards missover;
  3. length a1 $20.;
  4. length a2 $20.;
  5. input a1 a2 a3;
  6. n=_n_;
  7. cards;
  8. 1010758631 B2094757D169AAFA419C       
  9. 1010758631 B2094654D06EAAFD4299       
  10. 1012379795 B2094654D269A6FB4598       
  11. 1013933125 B2094654D065A7FC4392       
  12. 1013933125 B2094654D065A0FB4292       
  13. 1013933125 B2094654D16AAAFF4998       
  14. 1014253944 B2094654D065ABF84792       
  15. 1015097147 B2094654D068A6F4469C       
  16. 1015097147 B2094654D06FA3FC4899       
  17. 1015097147 B2094654D065A7FC4392       
  18. 1015097147 B2094654D065A7FE489B       
  19. 1015097147 B2094757D069A3F54192 1
  20. 1015097147 B2094757D165A3F5479D
  21. ;
  22. run;


  23. data y;
  24. set x;
  25. if a3=1 then do;
  26. call symput('t1',n);
  27. call symput('t2',a1);
  28. call symput('t3',a2);
  29. end;
  30. data y(keep= x y);
  31. set y;
  32. x = "&t3.";
  33. if _n_< &t1. and a1= &t2. then y=a2;
  34. else delete;
  35. run;
复制代码
我是一只瘦瘦的小猪~~~
╭︿︿︿╮
{/-◎◎-/}
( (oo) )
  ︶︶︶

使用道具

藤椅
intheangel 学生认证  发表于 2014-5-14 22:40:45 |只看作者 |坛友微信交流群
真是各种各样的问题都有呢~~不知道自己在写什么,只有一个1的时候可以用;
  1. data x;
  2. infile cards missover;
  3. length a1 $20.;
  4. length a2 $20.;
  5. input a1 a2 a3;
  6. n=_n_;
  7. cards;
  8. 1010758631 B2094757D169AAFA419C       
  9. 1010758631 B2094654D06EAAFD4299       
  10. 1012379795 B2094654D269A6FB4598       
  11. 1013933125 B2094654D065A7FC4392       
  12. 1013933125 B2094654D065A0FB4292       
  13. 1013933125 B2094654D16AAAFF4998       
  14. 1014253944 B2094654D065ABF84792       
  15. 1015097147 B2094654D068A6F4469C       
  16. 1015097147 B2094654D06FA3FC4899       
  17. 1015097147 B2094654D065A7FC4392       
  18. 1015097147 B2094654D065A7FE489B       
  19. 1015097147 B2094757D069A3F54192 1
  20. 1015097147 B2094757D165A3F5479D
  21. ;
  22. run;


  23. data y;
  24. set x;
  25. if a3=1 then do;
  26. call symput('t1',n);
  27. call symput('t2',a1);
  28. call symput('t3',a2);
  29. end;
  30. data y(keep= x y);
  31. set y;
  32. x = "&t3.";
  33. if _n_< &t1. and a1= &t2. then y=a2;
  34. else delete;
  35. run;
复制代码
我是一只瘦瘦的小猪~~~
╭︿︿︿╮
{/-◎◎-/}
( (oo) )
  ︶︶︶

使用道具

板凳
handsome0611 发表于 2014-5-15 00:21:56 |只看作者 |坛友微信交流群
intheangel 发表于 2014-5-14 22:40
真是各种各样的问题都有呢~~不知道自己在写什么,只有一个1的时候可以用;
真是太感谢了,想问下,如果我数据比较多,里面有很多1,怎么办呢?
其实这只是数据中的一部分。

使用道具

报纸
handsome0611 发表于 2014-5-15 06:29:35 |只看作者 |坛友微信交流群
intheangel 发表于 2014-5-14 22:40
真是各种各样的问题都有呢~~不知道自己在写什么,只有一个1的时候可以用;
数据中1比较多,怎么改进呢?
或者说,数据中我除了1还有2,3的话,我想都做出来,是不是该用循环语句做呢?

使用道具

地板
jingju11 发表于 2014-5-17 09:20:20 |只看作者 |坛友微信交流群
借鉴了一个小程序如下:更详细可阅读这里。她说,数组可能有胃肚限制。大概应该大雨是个百万。京剧
http://blog.sina.com.cn/s/blog_a3a92636010133hj.html


  1. data _null_;
  2. set x(keep =a3) end =Eof;
  3. retain Last1Position MaxLenIntervalbetween1s 0;
  4. if (a3 = 1 or Eof) then do;
  5. MaxLenIntervalbetween1s =max(MaxLenIntervalbetween1s, _n_ -Last1Position);
  6. Last1Position =_n_;
  7. end;
  8. if Eof then call symputx('MaxLenIntervalbetween1s', MaxLenIntervalbetween1s);
  9. run;
  10. data xx;
  11. keep ToMatch beMatched;
  12. set x;
  13. array _a1_[&MaxLenIntervalbetween1s] $20 _temporary_;
  14. array _a2_[&MaxLenIntervalbetween1s] $20 _temporary_;
  15. pre1Counts ++1;
  16. _a1_[pre1Counts] =a1; _a2_[pre1Counts] =a2;
  17. if a3 =1 then do;
  18. do i =pre1Counts-1 to 1 by -1;
  19. if _a1_[i] =a1 then do;
  20. ToMatch =a2; beMatched =_a2_[i];
  21. output xx;
  22. end;
  23. end;
  24. pre1Counts=0;
  25. end;
  26. run;
复制代码


使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 01:21