如何在SAS中用proc sql统计指定时间范围内各ID对应Code的出现次数
SAS 按ID和Code分组统计频次解决方案
PROC SQL 修正实现
原代码缺少分组计数逻辑,且SAS时间常量需要加t标识才能被正确识别,修正后代码如下:
proc sql; /* 生成结果数据集want */ create table want as select ID, Code, count(*) as N /* 统计每个分组的行数即出现次数 */ from have where Time between '00:00:00.000't and '23:50:00.000't /* 时间常量标准写法:引号包裹加t后缀 */ group by ID, Code; /* 按ID、Code组合分组 */ quit;
非PROC SQL 简便实现
用SAS原生频次统计过程proc freq实现更简洁,无需手动写分组逻辑:
/* 第一步:筛选符合时间范围的数据 */ data temp; set have; where Time between '00:00:00.000't and '23:50:00.000't; run; /* 第二步:分组统计频次,直接输出符合要求的汇总表 */ proc freq data=temp noprint; tables ID*Code / out=want(keep=ID Code Count rename=(Count=N)); run;
补充说明:如果你的
Time字段为字符类型而非SAS时间数值类型,需要先转换为数值格式再筛选,转换语法:Time_num = input(Time, time12.3);,后续使用Time_num做时间条件判断即可。
内容的提问来源于stack exchange,提问作者elemarles
相关产品推荐
相关产品推荐

