全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
7938 2
2008-10-26

现有id(字符型)   k(数值型,仅取0、1)   holdings(数值型)三个变量 

设置新变量new

目标:

1、当k=1时,new=holdings;

2、当k=0时,new=上一行观测中的holdings

我用了lag,语句如下:

Data a;
Set a;
if k=1 then new=holdings;
if k=0 then new=lag1(holdings);
run;

但这不对

k=1时,new=holdings可以实现;

k=0时,new的值是上一个“k=0”的观测的“holdings”的值;但如果上一行观测是"k=1",则我的要求就无法实现了。

请高手指教,谢谢。

二维码

扫码加我 拉你入群

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

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

全部回复
2008-10-26 17:00:00
我给你段样例代码,我觉得你注意问题是没有搞清楚,lag函数的用法限制: Because the LAG function stores values on the queue only when it is called, you must call LAG unconditionally to get the correct answers.

data a;
    id='01';
    k='0';
    holding='123';
    output;
    id='02';
    k='0';
    holding='123';
    output;
    id='03';
    k='1';
    holding='023';
    output;
    id='04';
    k='1';
    holding='103';
    output;
    id='05';
    k='1';
    holding='923';
    output;
run;

data a;
    set a;
    temp=lag(holding);
    if k eq '1' then do;
        new=holding;
    end;
    else do;
        new=temp;
    end;
run;

二维码

扫码加我 拉你入群

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

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

2008-10-26 22:21:00
谢谢楼上,问题已经解决,其实就是设两个变量,new1和new2,然后再把条件代入
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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