全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1208 0
2016-12-06
请问各位高手,SAS的Macro巨集能否改变变量的值
具体需求如下
日期进场讯号出场讯号1出场讯号2持有状态单号

2015/7/5

1

..

2015/7/6

1

..

TRUE

1

2015/7/7

1

..

TRUE

1

2015/7/8

...

TRUE

1

2015/7/9

.

1

.

TRUE

1

2015/7/10

1

1

.

2015/7/11

...

TRUE

2

2015/7/12

1

..

TRUE

2

2015/7/13

...

TRUE

2

2015/7/14

..

1

TRUE

2

2015/7/15

.

1

.

2015/7/16

1

..

2015/7/17

1

..

TRUE

3

2015/7/18

..

1

TRUE

3

2015/7/19

1

1

.

2015/7/20

.

1

.

TRUE

4

我有进场、出场讯号1、出场讯号2,想要在SAS里写出持有状态和单号
规则是:当进场讯号出现后隔天持有,其余的进场讯号都不再理他
当出场讯号1或出场讯号2出现就当天出场,出场后若还有出场讯号也都不理他
如果这是写在VBA里,我可以这样做

Dim HoldOn as Boolean, No as Integer
HoldOn=False
NO=0
For i=3 to 20
  If HoldOn=True Then
      Range("E" & i).Value=HoldOn
      Range("F" & i).Value=NO
  End If
  '写入讯号后才判定隔天是否应进出场
  If HoldOn=False And In=1 Then
      HoldOn=True
      NO=NO+1
  End If
  If HoldOn=True And (Out1=1 Or Out2=1) Then HoldOn=False

Next i

会写出简单的VBA程式码是因为我想要在SAS里找到类似于HoldOn这样的开关变数
想来想去也只有Macro变数最有可能达到我的需求
但当我用SAS写了一段宏,却发现解析值无法改变
SYMBOLGEN:  巨集变数 HOLDON 会解析为 'False'
SYMBOLGEN:  巨集变数 H 会解析为 'False'
为此我想说是否是因为SAS一次性全部判断
还加了n去递增所有数据
以便于只针对每一笔资料去判定
但还是无法让SAS里的HoldOn像VBA里的HoldOn自由切换True和False
请问SAS里有没有办法做到这样的功能
感谢各位高手!!


options symbolgen;
%let HoldOn='False';

%macro qq(H);
        if &H='False' then do;
                HO=1;
        end;
        %if In=1 and HoldOn=False %then %do;
                %let HoldOn=True;
               
        %end;
        %if out1=1 and HoldOn=True %then %do;
                %let HoldOn=False;
               
        %end;

%mend qq;


data TMP0;
        set P2;

        do i=1 to 840000000;
                if i=n then %qq(&HoldOn);
        end;

run;


P2的片段就是上面Demo的表格
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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