楼主: userzht
5585 25

[问答] 求指教代码:SAS用某些变量值相同的其他记录中另一变量值替换该记录的缺失值 [推广有奖]

11
userzht 发表于 2015-1-22 09:21:19 |只看作者 |坛友微信交流群
sushe1527 发表于 2015-1-21 14:10
谢谢啊!不过你还是没明白我的意思。24行那里,如果_d 缺失,那么还要用 a b c 三个变量查重,如果 a b c 三个变量都一样的话,那么要赋于同一个编号。。。

使用道具

12
sushe1527 发表于 2015-1-22 10:03:52 |只看作者 |坛友微信交流群
userzht 发表于 2015-1-22 09:21
谢谢啊!不过你还是没明白我的意思。24行那里,如果_d 缺失,那么还要用 a b c 三个变量查重,如果 a b c ...
可是2,4行不一样啊

使用道具

13
sushe1527 发表于 2015-1-22 10:05:36 |只看作者 |坛友微信交流群
反正和你说的结果一样 不知道你还想要啥样的

QQ截图20150122100508.jpg (222.12 KB)

QQ截图20150122100508.jpg

使用道具

14
userzht 发表于 2015-1-22 18:20:30 |只看作者 |坛友微信交流群
sushe1527 发表于 2015-1-22 10:05
反正和你说的结果一样 不知道你还想要啥样的
表烦啊,我再说详细一点,看图说话。。。

后来编的那个数据库也没有当d 缺失时而 a b c 全部一样的,如果有这种情况(第一张图),想变成第二张图:

QQ截图20150122181637.png QQ截图20150122181841.png

就是11和12行一样编号,10、13、14编号一样。

使用道具

15
sushe1527 发表于 2015-1-22 20:35:39 |只看作者 |坛友微信交流群
  1. data a;
  2. input a  b  c  d$;
  3. n=_n_;
  4. cards;
  5. 1  1  1  A
  6. 1  1  1  .
  7. 1  1  1  .
  8. 1  2  1  .
  9. 1  2  1  B
  10. 2  2  2  .
  11. 2  2  2  C
  12. 2  2  1  D
  13. 2  1  2  .
  14. 1  2  2  .
  15. 2  1  1  .
  16. 2  1  1  .
  17. 1  2  2  .
  18. 1  2  2  .
  19. run;
  20. proc sql ;
  21. create table aa as select *, max(d) as _d from a group by a,b,c;run;
  22. data final;
  23. set aa;
  24. by a b c _d ;
  25. retain flag;
  26. if first._d then flag+1;
  27. else if  first.a and first.b and first.c and _d="" then flag+1;
  28. RUN;

  29. /*proc sort data=final; by n;run;本行恢复排序*/
复制代码

使用道具

16
userzht 发表于 2015-1-22 22:14:30 |只看作者 |坛友微信交流群
sushe1527 发表于 2015-1-22 20:35
太棒了您

使用道具

17
userzht 发表于 2015-1-23 08:53:22 |只看作者 |坛友微信交流群
sushe1527 发表于 2015-1-22 20:35
高手,想请教另外一个问题。。。{:2_27:}

假设有这么个数据 :
data a;input a1 b1 c1 d1$ a2 b2 c2 d2$ a3 b3 c3 d3$ a4 b4 c4 d4$;cards;                                                                                                                                                                     
1 2 3 A 1 2 4 A 2 2 4 B 2 2 2 C                                                                                                         
1 2 2 A 2 2 3 B                                                                                                                        
1 2 5 B 2 3 1 C 3 3 2 A 3 2 5 A                                                                                                         
2 1 1 B 4 4 3 D 2 2 2 C 2 2 5 A                                                                                                         
2 2 2 B 5 5 3 A 2 3 1 A 3 2 5 A                                                                                                         
1 3 2 C 6 5 4 A 2 1 1 C 3 2 4 C                                                                                                         
1 4 3 C 3 2 1 C 4 3 3 C                                                                                                   
;                                                                                                                                       
run;

我想生成一个新数据集,挑出那些第一次出现A 的记录,并保留其后的信息,删除从未出现过A的记录,而那些第一次出现的都保留在前4列。

像这样:

1 2 3 A 1 2 4 A 2 2 4 B 2 2 2 C                                                                                                         
1 2 2 A 2 2 3 B                                                                                                                        
3 3 2 A 3 2 5 A                                                                                                                        
2 2 5 A                                                                                                                                 
5 5 3 A 2 3 1 A 3 2 5 A                                                                                                                 
6 5 4 A 2 1 1 C 3 2 4 C

谢谢!

使用道具

18
sushe1527 发表于 2015-1-23 14:02:23 |只看作者 |坛友微信交流群
userzht 发表于 2015-1-23 08:53
高手,想请教另外一个问题。。。

假设有这么个数据 :
  1. data a;
  2.   infile 'f:\x.txt' truncover ;
  3.   input temp  $ 100.;
  4. run;
  5. data b;set a;
  6. temp=compress(temp);
  7. do i=50 to 1 BY -1;
  8. IF SUBSTR(temp,I,1)="A"
  9. THEN  m=i-3;
  10. end;
  11. TEMP1=SUBSTR(TEMP,M,50);
  12. if m=. then delete;
  13. run;

  14. data final(drop=temp temp1 i m);
  15. set b;
  16. array var var1-var16 _CHARACTER_ ;
  17. do i=1 to dim(var) ;
  18. var(i)=substr(temp1,i,1);
  19. end;
  20. proc print;
  21. run;
复制代码

使用道具

19
userzht 发表于 2015-1-23 19:43:04 |只看作者 |坛友微信交流群
sushe1527 发表于 2015-1-23 14:02
如果不是temp一个变量,而是16个变量呢?如何根据变量选择?比如第4 个变量是A,第8个变量第一次出现A。。。

使用道具

20
sushe1527 发表于 2015-1-23 22:15:00 |只看作者 |坛友微信交流群
data a;
  infile 'f:\x.txt' truncover ;
  input  a1 b1 c1  d1$  a2 b2 c2  d2$  a3 b3 c3  d3$  a4 b4 c4 d4$;
run;
data b;set a;
temp=compress(cat(a1 ,b1 ,c1, d1, a2 ,b2 ,c2 ,d2,a3 ,b3 ,c3 ,d3,a4 ,b4 ,c4 ,d4));
do i=50 to 1 BY -1;
IF SUBSTR(temp,I,1)="A"
THEN  m=i-3;
end;
TEMP1=SUBSTR(TEMP,M,50);
if m=. then delete;
run;

data final(drop=temp temp1 i m a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3 a4 b4 c4 d4);
set b;
array var var1-var16 _CHARACTER_ ;
do i=1 to dim(var) ;
var(i)=substr(temp1,i,1);
end;
proc print;
run;

使用道具

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

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

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

GMT+8, 2024-4-20 06:46