SAS中文论坛

标题: +求教SAS高手+ [打印本页]

作者: silentzilch    时间: 2015-4-11 10:33
标题: +求教SAS高手+
本帖最后由 silentzilch 于 2015-4-11 10:36 编辑

有一个非常具体的问题,想求教各位大神如何实现:






如图所示,现有三组实验(实验A,B,C),实验对象8个,实验回目6次(0,1,3,4,6),每个实验对象都有不同次数的回目缺失。
要求:补全整个实验,对于最后一次实验之后所缺失的值,全部用实验回目0的值补出。(例如实验A,实验对象1仅有实验0,实验1的值,则后面实验3,4,6缺失的值全部用实验0补出)
对于实验回目中间所缺失的值,全部用上一次实验的值补出。(例如实验A,实验对象3有实验0,3,6的值,则缺失的实验1的值用实验0的值来补全,缺失的实验4的值用实验3的值来补出)

data a;
     attrib lab subject visit value coin label=" "
            value format=5.3;

     seed=4329;
     do lab="实验A", "实验B", "实验C";
        do subject=1 to 8;
           do visit=0, 1, 3, 4, 6;
              value=input(10*rannor(seed)+25, 5.3);
              coin=rantbl(seed,0.5,0.5);
              if NOT (subject in(2,6) and visit in(4.5, 6))
                 and NOT (subject in(7) and visit in(1,3,4.5)) then do;
                 if visit=0 or coin=1
                    then output;
              end;
           end;
        end;
     end;
     drop seed coin;

run;


data b;

do lab="实验A", "实验B", "实验C";
        do subject=1 to 8;
           do visit=0, 1, 3, 4, 6;
                   output;

                   end;
                   end;
                   end;
                   run;


整个实验补全以后应有120个observation,我知道整个过程比较复杂,以上代码我已经简单补出120个观察值。如果您可以实现整个过程,不胜感激!
如果您可以提示一下核心思路和核心语句同样不胜感激!



作者: rideau    时间: 2015-5-8 09:49
可以 参考 last observation carried forward 方法, 在CRO 中很常用 。
0, retain A1
1, sort by group.
2, first.group call missing(A)
3, if not missing then A1=A;





欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2