Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 日期格式的Sas更改_Date_Sas - Fatal编程技术网

Date 日期格式的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'

我在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';
    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;
    
  • 将“完整日期”字段转换为SAS日期值
  • 将年和月的组合也转换为SAS日期值
  • 使用INTCK函数以月为单位查找差异
  • 例如:

    数据日期
    输入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数据集。第一列是日期格式,第二列和第三列是数字。第一列看起来不像日期。看起来像一个日期时间,因为它有一个时间组件。非常感谢!非常有用,非常感谢!这很有帮助