楼主: liu022
1654 4

[原创博文] 请教一段代码的中几个语句的含义 [推广有奖]

  • 0关注
  • 6粉丝

已卖:181份资源

讲师

64%

还不是VIP/贵宾

-

威望
0
论坛币
879 个
通用积分
7.4013
学术水平
23 点
热心指数
18 点
信用等级
21 点
经验
3667 点
帖子
430
精华
1
在线时间
375 小时
注册时间
2007-5-21
最后登录
2025-10-22

楼主
liu022 发表于 2011-7-26 14:50:14 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位老师好!
        我想就下面一段代码的几个语句的含义请教一下:

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  是和谁进行比较?

谢谢老师!
二维码

扫码加我 拉你入群

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

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

关键词:RETAIN output outpu Count 是什么意思

沙发
soporaeternus 发表于 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或缺失值,则条件语句为假,反之为真。
已有 1 人评分论坛币 学术水平 热心指数 收起 理由
liuzhenzhu + 20 + 2 + 2 热心帮助其他会员

总评分: 论坛币 + 20  学术水平 + 2  热心指数 + 2   查看全部评分

Let them be hard, but never unjust

藤椅
liu022 发表于 2011-7-26 15:07:08
2# soporaeternus

非常感谢您的解答!

板凳
liu022 发表于 2011-7-26 15:09:39
2# soporaeternus


另外还有个问题:

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

报纸
honghejing 发表于 2011-7-26 15:49:41
可以使用by,if first.和if last.来实现

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 18:28