全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1618 4
2011-07-26
各位老师好!
        我想就下面一段代码的几个语句的含义请教一下:

data runcount;
        set two nobs=nobs end=last;
        retain runs 0 numpos 0;
      
        prevpos=( lag(D) GE 0 );
        currpos=( D GE 0 );
   
        if currpos and prevpos then do;numpos+1;end;
        else if currpos and ^prevpos then do;
           runs+1;
           numpos+1;
           end;

        else if ^currpos and prevpos then runs+1;
        if last then do;
          numneg=nobs-numpos;
          n=nobs;
          output;
        end;
   keep runs numpos numneg n;
run;


1)     retain runs 0 numpos 0; 是在生成 runs 和numpos变量的时候,始终把runs和numpos的值从0开始计算吗?

2)     prevpos=( lag(D) GE 0 );        currpos=( D GE 0 );这两句话是什么意思呢? 变量prevpos和currpos的取值是怎样的?

3)      if currpos and prevpos then do; 这里 的条件语句currpos and prevpos  是和谁进行比较?

谢谢老师!
二维码

扫码加我 拉你入群

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

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

全部回复
2011-7-26 15:03:16
liu022 发表于 2011-7-26 14:50
各位老师好!
        我想就下面一段代码的几个语句的含义请教一下:

data runcount;
        set two nobs=nobs end=last;
        retain runs 0 numpos 0;
      
        prevpos=( lag(D) GE 0 );
        currpos=( D GE 0 );
   
        if currpos and prevpos then do;numpos+1;end;
        else if currpos and ^prevpos then do;
           runs+1;
           numpos+1;
           end;

        else if ^currpos and prevpos then runs+1;
        if last then do;
          numneg=nobs-numpos;
          n=nobs;
          output;
        end;
   keep runs numpos numneg n;
run;


1)     retain runs 0 numpos 0; 是在生成 runs 和numpos变量的时候,始终把runs和numpos的值从0开始计算吗?

2)     prevpos=( lag(D) GE 0 );        currpos=( D GE 0 );这两句话是什么意思呢? 变量prevpos和currpos的取值是怎样的?

3)      if currpos and prevpos then do; 这里 的条件语句currpos and prevpos  是和谁进行比较?

谢谢老师!
1 仅一开始为0,retain仅确保变量不在每个data步开始前被重置
2 prevpos和currpos返回0或1.当lag(D)>=0时,prevpos取1,反之为0。currpos类似。
3 currpos and prevpos和0与缺失值比较,为0或缺失值,则条件语句为假,反之为真。
二维码

扫码加我 拉你入群

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

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

2011-7-26 15:07:08
2# soporaeternus

非常感谢您的解答!
二维码

扫码加我 拉你入群

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

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

2011-7-26 15:09:39
2# soporaeternus


另外还有个问题:

如果我希望数据集中按照某类分类标识(例如股票代码)来运行上述代码,请问我该加入什么样的语句?谢谢!
二维码

扫码加我 拉你入群

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

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

2011-7-26 15:49:41
可以使用by,if first.和if last.来实现
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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