全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3248 4
2012-12-31
有一份这样test的数据,我想对它插补缺漏值,原则是:如果数据的第一个值缺漏,则插入第一个非缺漏的数据,对于其他的情况按照之前非缺漏的值插补。我的做法是按照下面的方法:
复制代码


实际上我的方法用了宏,我想应该有直接用data步可以实现的做法……但是我没想出来,恳请各位大侠们解答一下~谢谢~


二维码

扫码加我 拉你入群

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

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

全部回复
2012-12-31 23:17:20
复制代码

二维码

扫码加我 拉你入群

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

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

2013-1-1 07:12:03
data test;
input x @@;
cards;
. . 1 2 . 3 . . 5
;run;
/* step 1: add a sequence number ID and change the missing value to zero */
data test_1;
    id = _n_;
     set test;
         if x = . then y = 0;
            else y=x;
run;

/* Step 2: reverse the order of the data by ID */
proc sort data=test_1 out=test_revers;
    by descending id;
run;

/* Step 3: create a lag variable */
data test_2;
     set test_revers;
        y_lag = lag(y);
run;

/* step 4: fill the missing value */
data test_3;
    set test_2;
        retain z;
    if _n_ = 1 and y~=. then  z = y;
        else if  y = 0 and y - y_lag < 0 then z = y_lag;
           else if y = 0 and y_lag = 0 then z = z;
        else z = y;
        drop y y_lag;
run;

/* change the order back */
proc sort data=test_3 out = test_4;
     by ID;
run;

data test_result (rename = (x=z));
    set test_4 (keep=z);
run;
二维码

扫码加我 拉你入群

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

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

2013-1-3 20:20:34
老师她摸我 发表于 2012-12-31 23:17
感到那个if _n_=1那里很神奇……之前不知道还可以这样运行的~列的方向上处理总是觉得很别扭T_T
二维码

扫码加我 拉你入群

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

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

2013-2-18 18:00:03
很好的补缺方法
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群