楼主: userzht
5865 25

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

  • 6关注
  • 3粉丝

博士生

34%

还不是VIP/贵宾

-

威望
0
论坛币
2362 个
通用积分
1.0004
学术水平
3 点
热心指数
3 点
信用等级
3 点
经验
4854 点
帖子
184
精华
0
在线时间
224 小时
注册时间
2009-5-19
最后登录
2021-10-19

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有a b c d 五个变量,其中d有缺失值,各记录中当 a b c 这三个变量相同时,就把它们当成同一个观测,我想用d不缺失的值替换d的缺失值,该怎么办啊?
比如啊,数据集test,
a  b  c  d
1  1  1  A
1  1  1  .
1  1  1  .
1  2  1  .
1  2  1  B
2  2  2  .
2  2  2  C
2  2  1  D
...

我写的代码是:
proc sort data=test;by descending a descending b descending c descending d;run;               
data test;set test;
do i=1 to 50;
temp=lag(d);                                                                                
if a=lag(a) & b=lag(b) & c=lag(c) & d='' then d=temp;
end;
run;      


原数据集很大,根据这个代码自己试了,发现有的还是填不上。请指教!多谢!

二维码

扫码加我 拉你入群

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

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

关键词:变量值 缺失值 求指教 ending test 记录

沙发
sushe1527 发表于 2015-1-20 20:52:27 |只看作者 |坛友微信交流群
  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. run;
  14. proc sql ; select *, max(d) as _d from a group by a,b,c order by n;run;
复制代码

使用道具

藤椅
userzht 发表于 2015-1-20 22:01:32 |只看作者 |坛友微信交流群
sushe1527 发表于 2015-1-20 20:52
确实比我的好用,但下一步,我想得到a b c 都唯一的一条记录,用下面的代码查重:

proc sort data=test NODUPKEY out=test11 dupout=test12;by a b c;run;

然后每一条唯一的记录给一个编号:

data test11;set test11;drop n;run;data test11;set test11;n=_n_;run;   

然后把这个唯一的编号再还给原来test 数据集中有变量d 的记录(数据集test1)(也就是data test1;set test;if d ne '';run;),为什么配上的编号总是少几个呢?

使用道具

板凳
userzht 发表于 2015-1-20 22:04:47 |只看作者 |坛友微信交流群
sushe1527 发表于 2015-1-20 20:52
其实本质上,我是想根据变量d 查重,但是d 有缺失值,不得已同时选用 a b c 三个变量,在变量 d 缺失的情况下,用a b c 查重。然后重复的记录根据时间先后顺序改造成时间序列数据或重复测量数据。

拜谢!

使用道具

报纸
sushe1527 发表于 2015-1-20 22:15:25 |只看作者 |坛友微信交流群
  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. run;
  14. proc sql ; create table aa as select *, max(d) as _d from a group by a,b,c order by n;run;
  15. data final;
  16. set aa;
  17. by _d;
  18. retain id;
  19. if first._d then id+1;
  20. id1=id;
  21. if d="" then id1="";
  22. if id1="" then delete;
  23. run;
复制代码

使用道具

地板
userzht 发表于 2015-1-21 08:03:45 |只看作者 |坛友微信交流群
sushe1527 发表于 2015-1-20 22:15
有点不对劲,当d 缺失时,我需要同时用 a b c 三个变量查重,可是最后出来的编号结果是,当 d 缺失时,所有的 id 都是相同的编号,找不出来一样的观测了。。。

使用道具

7
sushe1527 发表于 2015-1-21 09:44:52 |只看作者 |坛友微信交流群
烦躁,你直接说想生成啥样得了
1  1  1  A  1
1  1  1  .   1
1  1  1  .   1
1  2  1  .   2
1  2  1  B  3
2  2  2  .   4
2  2  2  C  5
2  2  1  D  6
这样?

使用道具

8
userzht 发表于 2015-1-21 11:25:25 |只看作者 |坛友微信交流群
sushe1527 发表于 2015-1-21 09:44
烦躁,你直接说想生成啥样得了
1  1  1  A  1
1  1  1  .   1
1  1  1  A  1
1  1  1  .   1
1  1  1  .   1
1  2  1  .   2
1  2  1  B  2
2  2  2  .   3
2  2  2  C  3
2  2  1  D  42  2  1  D  4
2  1  2  .   5
1  1  2  .   6
2  1  1  .   7

这样。。。

使用道具

9
sushe1527 发表于 2015-1-21 14:10:01 |只看作者 |坛友微信交流群
userzht 发表于 2015-1-21 11:25
1  1  1  A  1
1  1  1  .   1
1  1  1  .   1
  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. run;
  17. proc sql ;
  18. create table aa as select *, max(d) as _d from a group by a,b,c order by n;run;
  19. data final(drop=n _d);
  20. set aa;
  21. by _d notsorted;
  22. retain flag;
  23. if first._d then flag+1;
  24. else if _d="" then flag+1;
  25. RUN;
复制代码

使用道具

10
wpfwxn 发表于 2015-1-21 16:28:12 |只看作者 |坛友微信交流群
userzht 发表于 2015-1-20 22:01
确实比我的好用,但下一步,我想得到a b c 都唯一的一条记录,用下面的代码查重:

proc sort data=tes ...
可能跟匹配语句有关

使用道具

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

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

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

GMT+8, 2024-11-5 18:47