如何在SAS中去除日期的日部分?尝试monyy7.格式无效
解决SAS日期去除日部分的问题
首先得明确你的日期变量类型,分两种情况处理:
情况1:变量是SAS数值型日期(底层存的是从1960-01-01起的天数)
你说用monyy7.格式没生效,大概率是没正确应用格式,或者混淆了「显示格式」和「数值转换」:
- 只是想显示时隐藏日:直接给变量指定
monyy7.格式即可,它会把数值日期显示为OCT2019:
要是想显示更短的data want; set have; format your_date_var monyy7.; /* 替换成你的实际变量名 */ run;OCT19,用monyy5.格式就行。 - 要是需要把日期转换成当月第一天的数值日期(从底层去掉日信息),用
intnx函数:data want; set have; month_start_date = intnx('month', your_date_var, 0, 'b'); format month_start_date monyy7.; run;
情况2:变量是字符型日期(比如直接存成01OCT2019字符串)
这种情况直接用格式没用,得先处理字符串或者转成数值型日期:
- 直接截取字符串:从第3位开始取后面的字符,得到年月部分:
data want; set have; month_year_str = substr(your_char_date, 3); /* 结果是OCT2019 */ run; - 转成数值型日期再用格式:先把字符转成SAS数值日期,再指定格式:
data want; set have; date_num = input(your_char_date, date9.); format date_num monyy7.; run;
为什么monyy7.没生效?
- 如果是字符型日期:SAS格式只能作用于数值型变量,直接给字符变量用日期格式不会有效果。
- 如果是数值型日期:可能是你没正确执行格式赋值语句,或者误以为格式会改变变量的底层存储(格式只是控制显示,不修改原始数值)。
内容的提问来源于stack exchange,提问作者NewUsr_stat
相关产品推荐
相关产品推荐

