Date 日期格式的Sas更改
我在SAS中有三列日期格式不同:Date 日期格式的Sas更改,date,sas,Date,Sas,我在SAS中有三列日期格式不同: 2017年6月12日00:15-完整日期 2016-仅限年份 12-仅限一个月 我需要更改日期的格式,并在日期后进行减法,以得到月份数的结果 例如,“2017年6月12日00:15”-2016年12月=7 如何操作?正如您可能已经发现的那样,没有现成的方法可以正确处理完整的日期字段,因此在进行计算之前,您需要编写一些自定义逻辑来转换它日期9。是我能找到的最接近的匹配格式: data example; fulldate = '12 june 2017 00:15'
2017年6月12日00:15
-完整日期2016
-仅限年份12
-仅限一个月“2017年6月12日00:15”-2016年12月=7
如何操作?正如您可能已经发现的那样,没有现成的方法可以正确处理完整的日期字段,因此在进行计算之前,您需要编写一些自定义逻辑来转换它<代码>日期9。
是我能找到的最接近的匹配格式:
data example;
fulldate = '12 june 2017 00:15';
year = 2016;
month = 12;
/* Convert string to date9 format and input */
fulldate_num = input(
cats(
scan(fulldate,1),
substr(scan(fulldate,2,' '),1,3),
scan(fulldate,3)
), date9.
);
/* Calculate difference in months */
monthdiff = intck('month', mdy(month,1,year), fulldate_num);
run;
输入dt$18。yy-mm
mm_diff=intck(“mon”,输入(cat(yy,mm),yymmn6.),输入(dt,anydtdte12.); 放置mm_diff=
卡片
2017年6月12日00:15 2016 12
2018年6月11日00:15 2017 3
;
运行 日志将打印: mm_diff=6 mm_diff=15 作为旁注,此线程中其他地方的语句“没有现成的SAS日期信息可以正确处理您的完整日期字段”是不正确的。正如上面的程序片段所示,anydtew。informat沉着应对。程序员有义务提供足够的信息宽度W。在上面,它被选择为W=12。如果您不愿意猜测和/或计数,只需使用anydte32即可 问候,,
Paul Dorfman假设您有三个数字变量,第一个包含有效的SASdatetime值,则应首先将这两个变量转换为有效的SASdate值。然后可以使用INTCK()函数计算月份数
nmonths = intck('month',datepart(VAR1),mdy(VAR3,1,VAR2));
你说的是原始数据文件还是SAS数据集?这些变量中有没有一个是字符串而不是数字?第一个是具有有效SAS datetime值的数值变量吗?如果是这样的话,就没有一种格式可以完全按照您所显示的方式来显示它。你在问如何将(1)和(2和3一起)转换成日期值吗?这是一个Sas数据集。第一列是日期格式,第二列和第三列是数字。第一列看起来不像日期。看起来像一个日期时间,因为它有一个时间组件。非常感谢!非常有用,非常感谢!这很有帮助