【问题标题】:Convert SAS column to Date format将 SAS 列转换为日期格式
【发布时间】:2018-10-09 08:56:35
【问题描述】:

我在 best6 中有一列日期。格式例如201301 是 2013 年 1 月,201402 是 2014 年 2 月。

是否可以将其转换为 date9.格式?

我最终希望有一个只有年份的专栏,即 2013、2014、2015、2016 等。

我的主表称为“file1”,我的日期列称为“date1”,而我想要仅包含年份的列称为“year1”。 我试过了:

     data file1;
       year1= date1
       format year1 YEAR4.
     run;

但这没有奏效。它给了我一个名为 year1 和 date1 的两个空白单元格的输出。

【问题讨论】:

  • (1) 由于 201301 中没有月份中的某一天,您希望显示什么值? (2)请用您尝试过的内容更新问题。谢谢。
  • 欢迎来到 SO。请提供一个最小、完整和可验证的示例。 向我们展示您最近尝试的代码以及您遇到的问题。并解释为什么结果不是你所期望的。编辑您的问题以包含代码,请不要在评论中添加它,因为它可能不可读。 stackoverflow.com/help/mcve 最好展示实际发生的事情,而不是描述您期望发生的事情。
  • 为歧义道歉-我添加了更多信息。

标签: date sas


【解决方案1】:

由于 date1 变量不是 SAS 日期,即您只有代表 2013 年 1 月的数值 201301,那么您应该能够使用一些数学函数,例如:

data want;
   set file1;
   year1 = int(date1/100);
run;

【讨论】:

  • 谢谢!我现在就试试这个!
  • 这在没有 int() 的情况下对我有用,我插入了一个格式行“format year1 4.;”以四舍五入到最接近的 while 数字。谢谢!
  • 单独使用格式只会显示整数值,但变量仍将保留2013.01(包括小数位)。您可以通过创建year2(未格式化)并为其分配year1 的值来查看这一点。 int() 函数将删除小数部分。
  • 我在使用 int() 时收到错误,但我会再试一次。谢谢
【解决方案2】:

这有点尴尬,因为您必须从数字转换为字符然后再转换回来:

data _null_;
  mydate = 201301;
  mydate9 = input(put(mydate,6.),yymmn6.);
  format mydate9 date9.;
  put _all_;
run;

【讨论】:

    【解决方案3】:

    您应该首先检查它是否是 6 位数字而不是 yymmn6。日期格式。如果是 yymmn6。格式你可以只添加格式year4。或 date9.. 否则同意 user667589:

    data test;
      format date1 year4.;
      set file1;
    run;
    
    data test2;
      format mydate9 date9. myyear year4.;
      mydate = 201301;
      mydate9 = input(put(mydate,6.),yymmn6.);
      myyear = mydate9;
    run;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      相关资源
      最近更新 更多