首页 > 解决方案 > 如何计算列中特定模式的出现次数 - SAS?

问题描述

我有一个类似于我在下面包含的数据集:

 Hour     Value
  1         0
  2         14
  3         50
  4         110
  5         0
  6         23 
  7         35
  8         72
  9         99
  10        133
  11        187
  12         0 
  13         70
  14         100
  15         0
  16         63
  17         0

我想返回包含值从 0 增加到 100 的次数的输出,中间没有任何零。所以在这个例子中,我想返回'3'。请注意,小时 15、16 和 17 不会被计算在内,因为在返回零之前该值永远不会达到 100。

任何帮助将不胜感激!

标签: countsas

解决方案


假定value总是重置为0,否则总是增加。

你会需要

  • 标记变量以跟踪是否value达到或超过阈值100
    • 重置为value
  • 计数变量以保持达到的阈值数量

标志计数应该被编辑,retain这样它们就不会在隐式循环的顶部被重置为缺失。

例子:

data have; input 
Hour     Value; datalines;
  1         0
  2         14
  3         50
  4         110
  5         0
  6         23 
  7         35
  8         72
  9         99
  10        133
  11        187
  12         0 
  13         70
  14         100
  15         0
  16         63
  17         0
;

data want;
  set have;

  retain flagged;        * explicitly specify that flag is to be retained;

  if value = 0 then flagged = 0;

  if not flagged and value >= 100 then do;
    flagged = 1;
    count + 1;            * sum statement, count implicitly retained;
  end;
run;

在此处输入图像描述


推荐阅读