【问题标题】:Batch formatting of Date in multiple datasets多个数据集中日期的批量格式化
【发布时间】:2017-09-13 13:23:41
【问题描述】:

我已经使用 proc import 将一些 excel 电子表格提取到 sas 中。但是我现在需要将数据集连接在一起,并且需要所有数据集的统一日期格式。它们目前是字符格式,有些是“1999Q1”日期,有些是“12/02/2013”​​日期。关于如何更改所有数据集中所有日期的格式的任何帮助?

【问题讨论】:

  • 它们都是数字、字符串还是两者的混合?
  • 如果你有 1999Q1 应该默认为季度开始,或者像 12/02/2013 这样的日期是 2013Q4?
  • 对不起。应该更清楚。日期字段是季度日期的字符。对于其他日期,SAS 将它们选为日期字段。所以对于 1999 年第一季度,它应该是 1999 年 3 月 31 日。我需要所有日期都是月末。我可以对日期执行此操作,但只是不知道如何将文本中的季度日期转换为月末日期。
  • 您知道要修复的变量名称吗?如果它们没有附加日期格式,你怎么知道它们应该是日期而不是把它们作为字符?变量名称是否跨数据集匹配?
  • 是的。所有带有日期的相关变量都具有变量名称“日期”

标签: excel date csv import sas


【解决方案1】:

您需要使用 INPUT() 函数将字符串转换为日期,以便合并它们。让我们制作一些示例数据集来模拟您可能从 Excel 工作表中导入的内容。

data have1;
  date='1999Q1';
  var1=1;
run;
data have2;
  date='02DEC2013'd ;
  format date yymmdd10.; 
  var2=2;
run;

现在让我们从这些数据集中获取变量名称和类型。

proc contents data=work._all_ noprint out=contents; run;

我们可以使用这个元数据编写一些代码来将字符串转换为日期。

filename code temp;
data _null_;
  set contents;
  where upcase(name)='DATE' and type=2;
  file code ;
  length dsn $41;
  dsn=catx('.',libname,memname);
  put 'data ' dsn ';'
    / '  set ' dsn ';'
    / '  datenum=input(date,anydtdte.);'
    / '  format datenum yymmdd10.;'
    / '  rename datenum=date date=datechar;'
    / 'run;'
  ;
run;

%inc code / source2 ;

现在我们可以合并数据集了。

data want ;
  merge have1 have2;
  by date;
run;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 2023-03-29
    • 2021-09-19
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多