如何使用 proc sql 计算 SAS 范围内的特定变量?
How to count a specific variable between a range in SAS using proc sql?
我是 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
我对 table 感兴趣,它总结了 0:00:00.00 和 23:50:00.00 之间有多少 N 代码 1、N 代码 2 等等每个ID。所以,输出看起来像这样:
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 那也没关系。非常感谢!
要过滤分析中使用的数据,请使用 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;
我是 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
我对 table 感兴趣,它总结了 0:00:00.00 和 23:50:00.00 之间有多少 N 代码 1、N 代码 2 等等每个ID。所以,输出看起来像这样:
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 那也没关系。非常感谢!
要过滤分析中使用的数据,请使用 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;