使用具有迭代DO语句的ARRAY语句

时间:2013-04-04 23:13:19

标签: arrays sas do-loops

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

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

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

我是新手做循环,这个让我头疼。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分: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编程真正有用的功能之一。

答案 1 :(得分:0)

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