楼主: carol1222
2416 8

[原创博文] 关于缺失值的处理,不是常规意义的missing [推广有奖]

  • 5关注
  • 0粉丝

硕士生

41%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1283 点
帖子
157
精华
0
在线时间
74 小时
注册时间
2010-5-6
最后登录
2014-11-13

楼主
carol1222 发表于 2012-5-23 16:05:53 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
比如我有个序列,应该是1,2,3,4,5.。。
但是可能中间缺了3,5.那么我想要3,5的值表示出来变成.。
例如
1 20
2 20
4 30
6 90
我想数据集变成
1 20
2 20
3 .
4 30
5 .
6 90

那要怎么办呢???
跪求解!!谢谢啊!!
二维码

扫码加我 拉你入群

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

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

关键词:missing Miss SSIN MIS Iss

沙发
bluebluestar 发表于 2012-5-23 17:02:52
data a;
input a b;
cards;
1 20
2 20
4 30
6 90
;
run;

data b(drop=i);
do i=1 to 6;
a=i;
b=.;
output;
end;
run;

proc sql;
create table c as
select b.a as ca
      ,case
      when a.b ne . then a.b
      else b.b end as cb
      from b left jion a
      on b.a=a.a
      order by b.a;
      quit;
已有 1 人评分论坛币 收起 理由
admin_kefu + 100 热心帮助其他会员

总评分: 论坛币 + 100   查看全部评分

求币^^^^^^

藤椅
carol1222 发表于 2012-5-23 17:22:29
bluebluestar 发表于 2012-5-23 17:02
data a;
input a b;
cards;
嗯~~~excellent,我就没想到这样做!!
花有再开日 人无再少年

板凳
chendonghui1987 发表于 2012-5-24 09:51:09
data a;
input a b;
cards;
1 20
2 20
4 30
6 90
;
run;

data work.b;
        do a = 1 to 6;
                outpaut ;
        end;
run;

data work.c;
        merge work.a work.b;
        by a;
run;

报纸
chendonghui1987 发表于 2012-5-24 09:52:12
需要先按照a排好序

地板
eddions 发表于 2012-5-25 00:14:23
chendonghui1987 发表于 2012-5-24 09:51
data a;
input a b;
cards;
此处正当用merge by,sql略显累赘

7
乾坤神龙 发表于 2012-5-25 15:23:24
  1. data a;
  2. input a b;
  3. cards;
  4. 1 20
  5. 2 20
  6. 4 30
  7. 6 90
  8. ;
  9. run;
  10. proc sort data=a;by a;run;
  11. data _null_;
  12. set a;
  13. by a;
  14. if last.a then do;
  15. call symputx('final',a);
  16. end;
  17. run;
  18. data b(drop=i);
  19. do i=1 to &final.;
  20. a=i;
  21. output;
  22. end;
  23. run;
  24. data a1;
  25. merge a b;
  26. by a;
  27. run;
复制代码
这个里面加了一个读取最大值的操作,将最大值作为循环的终结点!!

8
eddions 发表于 2012-5-25 22:04:09
  1. data _null_;
  2. set a;
  3. by a;
  4. if last.a then do;
  5. call symputx('final',a);
  6. end;
  7. run;
复制代码
用这个代码产生最后最后一个a的值不太经济,因为要多次重复读取整个数据集,可以考虑用下面的代码,这样只需要读取一行数据。虽然对这个例子不是很有用吧
  1. data _null_;
  2.         set a nobs=totobs point=totobs;
  3.         output;
  4.         call symput('final',a);
  5.         stop;
  6. run;
复制代码

9
demondong 发表于 2012-5-26 22:38:20
data a;
do a=1 to 6;
output;
run;

data b;
input a b;
cards;
1 20
2 20
4 30
6 90
;
run;

proc sql;
create table c as
select a.a,b.b
from a left join b on a.a=b.a;
quit;

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

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