全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
7983 7
2019-08-14
data test;
var="a";output;
var="a";output;
var="a";output;
var="f";output;
var="f";output;
var="f";output;
var="f";output;
var="b";output;
var="c";output;
var="c";output;
run;
图为我想生成的数据集。
Snipaste_2019-08-14_15-26-01.png


/*第一种方法直接写的if与else,其程序结果与我想要的结果一样,如图所示*/
data test1;
   set test;
   if var ne lag(var) then do;
        retain i;
        i=1;
   end;
   else i=i+1;
run;
/*第二种方法写的if else if ,其程序结果与方法一不同*/
data test3;
   set test;
   if var ne lag(var) then do;
        retain i;
        i=1;
   end;
   else if var = lag(var) then i=i+1;
run;
结果如下:
Snipaste_2019-08-14_15-29-44.png

请问大神们,为什么结果不一致?导致第二种结果的原因是什么?不胜感激!




二维码

扫码加我 拉你入群

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

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

全部回复
2019-8-14 16:01:13
data test3;
   set test;
   if var ne lag(var) then do;
        retain i;
        i=1;
   end;
    if var = lag(var) then i=i+1;
run;
这一种也可以生成我想要的数据集,就搞不明白这几种之间的区别
二维码

扫码加我 拉你入群

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

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

2019-8-14 17:59:50
有一种说法是当lag(x)=x 写在条件式中时,SAS是无法读取的,你可以再加一个变量var_lag=lag(var)来观察一下它的结果,会发现在第一个条件"if var ne lag(var)"下, lag是没有读取到上一个实参的。
二维码

扫码加我 拉你入群

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

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

2019-8-15 11:10:57
/*LAG返回的是上一次LAGE函数运行时的实参,即LAG(argument)=上一次LAG函数执行时的argument.*/
所以你把它放在第二个if语句里面的时候,它会把第二个值作为初始值,所以不是说If else和if else if 的问题,而是lag函数的使用
二维码

扫码加我 拉你入群

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

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

2019-8-18 20:18:59
捕获.PNG
复制代码
二维码

扫码加我 拉你入群

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

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

2019-8-18 20:24:57
复制代码
test4
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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