在SAS中基于独立时分、上下午变量创建24小时制时间变量的问题
12小时制多字段转24小时制时间变量的SAS实现方案
原代码错误原因
你之前的代码存在两个核心问题:
- SAS的
time.系列格式默认将输入的数值当做秒数处理,你直接传入代表小时的数值10,自然会被解析为10秒,输出0:00:10 - 没有结合分钟、AM/PM标识两个字段参与转换,无法得到正确的24小时制时间
正确实现代码
data want; set have; * 拼接12小时制时间字符串后,用timeAMPM格式解析为SAS时间值; bedtime = input(catx(':', hr_bedhr, hr_bedmin) || ' ' || hr_bedampm, timeAMPM10.); * 设置输出格式为24小时制HH:MM:SS; format bedtime HHMMSS8.; run;
实现逻辑说明
- 用
catx函数将小时、分钟字段拼接为时:分格式的字符串,再拼接空格和AM/PM标识,得到完整的12小时制时间字符串,比如第一行数据会被拼接为10:0 PM - 用
input函数配合timeAMPM.输入格式,将12小时制字符串转换为SAS标准时间数值(SAS时间值本质是从0点开始的秒数),该输入格式原生支持12AM转0点、12PM转12点的规则,完全匹配你的需求 - 给新生成的
bedtime变量设置HHMMSS8.输出格式,最终展示为你需要的HH:MM:SS24小时制样式
内容的提问来源于stack exchange,提问作者elemarles
相关产品推荐
相关产品推荐

