0

我正在处理一个数据集 (DATA),它有 3 个变量(Var1、Var2、Var3),格式我需要更改。这些变量采用特殊的日期格式(例如出于目的,比如 OLDFMT1),我需要使用 DATEPART 函数将它们更改为常规的 SAS 日期格式。

问题是我需要在单个数据步骤中使用 do 循环和调用 DATEPART 函数的数组来完成此操作。必须在数组中正确使用 DIM 函数,并且我必须在结束数据集之前删除索引变量 (i)。

然后,我必须申请 DATE9。对这些变化的变量起作用。

我对循环还很陌生,这让我非常头疼。任何帮助将不胜感激。

4

2 回答 2

2

通过说您要使用该DATEPART函数,您暗示您的三个现有变量当前存储为 SAS“日期时间”值。所以试试这个:

data have;
  var1 = datetime();
  var2 = datetime();
  var3 = datetime();
  format var1-var3 datetime19.;
run;

data want;
   set have;
   array allvars(*) var1-var3;
   do i=1 to dim(allvars);
      allvars(i) = datepart(allvars(i));
      end;
   format var1-var2 date9.;
   drop i;
run;

请记住,SAS 只有两种数据类型(数字和字符)。日期、时间和日期时间仅在以适当的格式使用时才“已知”。在 SAS 中:

  • 日期是自 1960 年 1 月 1 日以来的天数
  • 时间是自午夜以来的秒数
  • 日期时间是自 1960 年 1 月 1 日以来的秒数。

请注意,这date9.不是函数;它是一种格式。有许多不同的格式可用于“暴露”变量的基础值,但值本身不会改变。这是 SAS 编程真正有用的特性之一。

于 2013-04-05T00:30:38.787 回答
0

如果您只想将数据格式化为 DATE9.,而不必存储为日期,则可以将前缀 DT 应用于任何日期格式并将其应用于日期时间值。所以DTDATE9。format 将以 date9 格式显示日期时间值。

于 2013-04-05T07:46:24.557 回答