楼主: ertyuj
2329 4

[原创博文] 如何检查以及处理包含数据遗失的变量 [推广有奖]

  • 0关注
  • 1粉丝

已卖:7份资源

硕士生

40%

还不是VIP/贵宾

-

威望
0
论坛币
254 个
通用积分
0.7615
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
-351 点
帖子
136
精华
0
在线时间
164 小时
注册时间
2007-2-7
最后登录
2022-3-17

楼主
ertyuj 发表于 2012-6-19 16:28:52 |AI写论文
20论坛币
各位大侠,我有一个数据文件,包含若干变量,其中很多变量具有数据遗失。比如下面这个包含4个变量的例子:

DATA Test;
INPUT age income education weight;
DATALINES;
1 2 4
. 5 . .
. 8 5 2
6 7 . .
9 . . 3
1 2 3 .
4 . . 5
;
RUN;

请教各位大侠,如何使用SAS DATA或者PROC SQL依次进行如下两步操作:

第一步: 如果一个变量超过20%数据遗失,那么就把这个变量从数据文件中删除。通俗一点,我想检查包含数据遗失情况,如果一个变量数据遗失情况严重,则将这个变量删除。

第二步:如果一行数据中任意一个变量具有数据遗失,则将这行数据删除。

如果我的问题没有完全描述清楚,那么尽情按照您的理解提供相应答案。无论大侠提供SAS CODE给第一步,或第二步,鄙人感激不尽。

如果变量数目很多,需要进行重复操作。这可能会要用到宏。如有可能,如能将如上两步程序用宏进行封装更佳,但是,并不奢求。

最佳答案

可~乐 查看完整内容

嗯,你看看下面这个能否满足。。。
关键词:Education ducation proc sql cation Income education income 如何 遗失

沙发
可~乐 发表于 2012-6-19 16:28:53
嗯,你看看下面这个能否满足。。。
  1. DATA Test;
  2. INPUT age income education weight;
  3. /*if age^=. then nn+1;*/
  4. DATALINES;
  5. 1 2 4 .
  6. . 5 . .
  7. 6 7 . .
  8. 9 . . 3
  9. 1 2 3 .
  10. 4 . . 5
  11. ;
  12. RUN;

  13. %macro test;

  14. proc sql noprint;
  15.       select name into :_varlist separated by " "
  16.       from sashelp.vcolumn
  17.           where libname="WORK" and memname="TEST";
  18. quit;

  19. %put &_varlist.;

  20. ods output MissingValues=miss;
  21. proc univariate;
  22.         var &_varlist.;
  23. run;
  24. ods output close;

  25. data miss;
  26.         set miss nobs=number;
  27.         Countpercent=round(CountNobs,0.01);
  28.         call symput("var_name"||left(_n_),VarName);
  29.         call symput("var_percent"||left(_n_),Countpercent);
  30.         call symput("number",number);
  31. run;

  32. data test1;
  33.         set test;
  34.         %do i=1 %to &number.;
  35.                 %if &&var_percent&i.>20 %then %do;drop &&var_name&i.;%end;
  36.         %end;
  37. run;

  38. data test1(drop=j);
  39.         set test1;
  40.         array testmiss(*) _numeric_;                                         
  41.         do j=1 to dim(testmiss);                                            
  42.             if testmiss(j)=. then delete;                              
  43.         end;
  44. run;

  45. %mend;

  46. %test;
复制代码

藤椅
raymonica 发表于 2012-6-22 03:14:38
thanks, good to know.

板凳
jjtww 发表于 2012-7-10 17:53:05
不需要这么麻烦,用proc timeseries第一步可以轻松搞定。

报纸
Jackywolf_2008 发表于 2012-7-10 18:28:43
第二步用do over + 数组可以搞定.
data demo;
set your_data;
array var{*} 8 var1-varN;
flag = 0;
do over var;
  if missing(var) then flag = 1;
end;
if flag ne 1;
run;

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

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