报告SAS中满足条件的次数

时间:2012-02-17 22:01:51

标签: sas

给出这样的数据步骤:

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

我想写一下if语句为真的次数。例如,在此示例中,我希望在日志中有一行说明:

  

如果陈述真实3次

因为i为4,5或6时条件为真。我该怎么做?

1 个答案:

答案 0 :(得分: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;