统计211

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3582|回复: 0
打印 上一主题 下一主题

SAS: 根据要求查找缺失值

[复制链接]
跳转到指定楼层
1
发表于 2011-6-23 13:28:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Datasets:

data data1;
input no x0 y0 a0 ab x1 x2 x3;
cards;
1 1 1 1 1 2 2 2
2 . . . . 1 1 1
3 1 2 3 4 . . .
4 . . 2 3 3 4 .
;

data data2;
input variable $ visit;
cards;
x0 1
y0 1
a0 1
ab 1
x1 2
x2 2
x3 2
;Expected dataset:
data1中no为编号(唯一),x0 y0 a0 ab为访视1的变量,x1 x2 x3为访视2的变量。现在核查缺失的情况:如果某个个体访视1的变量全部缺失,则查访视1的四个变量时忽略这个个体,访视2类似。结果如下:

no   variable   value
4      x0          .
4      y0          .
4      x3          .My Solution:


%macro missing;

proc sort data=data2;
by visit;
run;

data _null_;
set data2 end=eof;
by visit;
length var $ 32767;
retain var "";
if first.visit then do;
  var="";
  num+1;
  n=0;
end;
n+1;
var=catx(" ",strip(var),strip(variable));
if last.visit then do;
  call symputx("n_"||strip(put(num,best.)),strip(put(n,best.)));
  call symputx("var_"||strip(put(num,best.)),strip(var));
end;
if eof then call symputx ("num",num);
run;

data tmp;
set data1;
%do i=1 %to &num.;
retain visit_&i._flag 0;
visit_&i._flag=0;
  %do j=1 %to &&n_&i.;
   %let vartmp=%scan(&&var_&i.,&j.,%str( ));
   if not missing(&vartmp.) then visit_&i._flag=1;
  %end;
%end;
run;

data want;
set tmp;
length variable $ 10;
%do i=1 %to &num.;
  %do j=1 %to &&n_&i.;
   %let vartmp=%scan(&&var_&i.,&j.,%str( ));
   if missing(&vartmp.) and visit_&i._flag=1 then do;
    variable="&vartmp.";
    value=&vartmp.;
    output;
   end;
  %end;
%end;
keep no variable value;
run;

%mend;

%missing;


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


免责声明|关于我们|小黑屋|联系我们|赞助我们|统计211 ( 闽ICP备09019626号  

GMT+8, 2025-4-19 11:46 , Processed in 0.083987 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表