楼主: sunnytree
11772 11

请教大家:如何在sas中有选择的删除变量 [推广有奖]

  • 1关注
  • 0粉丝

硕士生

54%

还不是VIP/贵宾

-

威望
0
论坛币
264 个
通用积分
0
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
11687 点
帖子
158
精华
0
在线时间
201 小时
注册时间
2009-2-5
最后登录
2025-10-19

楼主
sunnytree 发表于 2009-9-7 21:13:16 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
具体问题是:有250个变量,如果在某个观测值处,某变量missing ,则删除此变量。

应该不是很难的问题,我查了不少资料,也没找到解决方法。请高手指点一下方向,我再去查资料。

谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:missing Miss SSIN 解决方法 高手指点 请教 选择 变量 SAS 删除

回帖推荐

sushe1527 发表于3楼  查看完整内容

这个凑活着用吧 data a; input x1 x2 x3 x4 x5; cards; 1 2 3 6 7 . 2 6 4 6 . . 9 . 5 ; run; proc transpose data=a out=b;run; data b;set b;id=_n_;run; Data d;Set b(drop=_name_); Array Numr _all_; Do Over Numr; If Numr in(.) Then delete; End;Run; proc sql noprint; create table c as select * from b where exists (select * from d where d.id=b.id) ;quit; proc transpose data=c(drop=id ...

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

如果一个变量有任一缺失值,则删除该变量。你所要即是数据集old。

本帖被以下文库推荐

沙发
shawfee 发表于 2009-9-7 21:33:22
是不是可以这样做
data  a;
set  a;
if var1=. then delete;
if var2=. then delete;
...
...
  if var250=. then delete;
run;
愛是恆久忍耐,又有恩慈;愛是不嫉妒;愛是不自誇,不張狂,不作害羞的事,不求自己的益處,不輕易發怒,不計算人的惡,喜歡不義,只喜歡真理;凡事包容,凡事相信,凡事盼望,凡事忍耐;愛是永不止息。

藤椅
sushe1527 发表于 2009-9-7 23:27:49
这个凑活着用吧
data a;
input x1 x2 x3 x4 x5;
cards;
1 2 3 6 7
. 2 6 4 6
. . 9 . 5
;
run;
proc transpose data=a out=b;run;
data b;set b;id=_n_;run;
Data d;Set b(drop=_name_);
Array Numr _all_;
Do Over Numr;
If Numr in(.) Then delete;
End;Run;
proc sql noprint;
create table c as
select * from b
where  exists
(select * from d where d.id=b.id)
;quit;
proc transpose data=c(drop=id) out=final(drop=_name_);run;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

板凳
jingju11 发表于 2009-9-8 03:34:44
  1. data old;
  2. input x y z $ u $;
  3. if u='m' then u='';
  4. datalines;
  5. 1 2 f m
  6. 1 . a b
  7. . . c c
  8. ;
  9. run;
  10. data old1;
  11. set old;
  12. array num _numeric_;
  13. array char _character_;
  14. length missingV $32.;
  15. do over num;
  16.   if missing(num) then do;
  17.    missingV=vname(num);
  18.    output;
  19.   end;
  20. end;
  21. do over char;
  22.   if missing(char) then do;
  23.    missingV=vname(char);
  24.    output;
  25.   end;
  26. end;
  27. keep missingV ;
  28. run;
  29. proc sql noprint;
  30. select distinct missingV into :missingVs separated by ','
  31.   from old1;
  32. alter table old
  33.     drop &missingVs;
  34. quit;
复制代码


如果一个变量有任一缺失值,则删除该变量。你所要即是数据集old。
已有 2 人评分经验 论坛币 学术水平 热心指数 收起 理由
bakoll + 3 + 3 精彩帖子
sunnytree + 1 + 1 好的意见建议

总评分: 经验 + 3  论坛币 + 3  学术水平 + 1  热心指数 + 1   查看全部评分

报纸
sunnytree 发表于 2009-9-8 11:12:33
谢谢楼上三位的回答。我自己再试了试。

shawfee的回答有点问题,delete是用来删除observation的。
sushe1527和jingju11的程序都是正确的。

再次谢谢!

地板
caisemail 发表于 2015-12-12 15:39:59
直接
data newdata;
set olddata;
drop var ...;
(or keep var ...)
这多简单,楼上的都简单问题复杂化了

7
teqel 发表于 2015-12-12 23:06:39
最简单的是用sql测试每个变量的最小值是否是missing

8
Tigflanker 发表于 2015-12-13 17:18:20
你需要用call execute去搞它

9
穿在袜子上的脚 发表于 2015-12-14 11:04:36
data a;
arrary x{*}_all_;
do i= 1 to dim(x{*});
if missing(x{i}) then delete;
run;

10
foolmansoga 发表于 2016-6-14 10:27:19
sushe1527 发表于 2009-9-7 23:27
这个凑活着用吧
data a;
input x1 x2 x3 x4 x5;
如果是全部值缺失才删除的话该怎么改?

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

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