具体需求如下
日期 | 进场讯号 | 出场讯号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出现就当天出场,出场后若还有出场讯号也都不理他
如果这是写在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'
还加了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的表格