2012-02-17 30 views
1

如果有一个数据的步骤是这样实现:报告多少次条件在SAS

data tmp; 
do i=1 to 10; 
    if 3<i<7 then do; 
    some stuff; 
    end; 
end; 
run; 

我要写入日志多少次,如果声明是真实的。例如,在这个例子,我想有说在日志中的一行:

如果陈述属实3次

因为条件为真时i是4,5或6 。 我怎样才能做到这一点?

回答

4

使用retain来保留一个计数器变量,可以非常容易地增加满足if条件的次数。

data tmp; 
retain Counter 0; 
do i=1 to 10; 
    if 3<i<7 then do; 
    Counter+1; 
    *some stuff; 
    end; 
end; 
put 'If statement true ' Counter 'time(s).'; 
run; 

注意,因为它是数据跳跃解除前发生(只有一个在示例中的数据步循环)的最后一件事这个写入日志一次。如果您想要为具有多个循环的数据步骤执行此操作(例如,当存在从其他数据集读取数据的set语句时,您希望告诉SAS您只希望它在步骤结束时报告。你会这样做:

* create an example input data set; 
data exampleData; 
    do i=1 to 10; 
    output; 
    end; 
run; 

* use a variable 'eof' to indicate the end of the input dataset; 
data new; 
set exampleData end=eof; 
retain Counter 0; 
if 3<i<7 then do; 
    Counter+1; 
    *some stuff; 
end; 
if eof then put 'If statement true ' Counter 'time(s).'; 
run;