首页 > 解决方案 > 如何使用proc sql计算SAS范围内的特定变量?

问题描述

我是 SAS 新手,我遇到了 proc sql 问题。我有一个垂直数据集:

ID    Code  Time
001   1     0:00:00.00
001   1     0:10:00.00
001   2     0:20:00.00
...   ...   ...
001   9     23:50:00.00

我有兴趣有一个表格来总结每个 ID 在 0:00:00.00 和 23:50:00.00 之间有多少 N 代码 1、N 代码 2 等等。所以,输出看起来像这样:

ID   Code  N
001  1     28
001  2     17
001  3     5
...

现在,我有这样的事情:

proc sql;
select Code,ID
from have
where Time between 0:00:00.000 and 23:50:00.000;quit;

如果有人有更简单的方法并且不是使用 proc sql 也没关系。非常感谢你!

标签: sqlsas

解决方案


要过滤分析中使用的数据,请使用 WHERE 语句(或 SQL 语句的 WHERE 子句)。确保使用与变量中的值类型匹配的值。

where time between '00:00:00't and '23:00:00't

要计算观察次数,您可以使用 PROC SQL 和带有 GROUP BY 子句的 COUNT() 聚合函数。

proc sql;
select Code,ID,count(*) as N
  from have
  where Time between '00:00:00't and '23:00:00't
  group by code, id
;
quit;

或者只是使用常规 SAS 代码来进行计数。

proc summary data=have nway;
  where Time between '00:00:00't and '23:00:00't;
  class code id;
  output out=want(rename=(_freq_=N));
run;

如果您的 TIME 变量实际上是字符,那么如果您的某些字符串只有一位数字作为 HOUR 数字,那么尝试限制范围将很困难。因此,将其转换为时间值(自午夜以来的秒数)以进行范围测试。

  where input(Time,time12.) between '00:00:00't and '23:00:00't;

推荐阅读