首页 文章

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

提问于
浏览
0

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

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

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

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

2 回答

  • 0

    通过说你想使用 DATEPART 函数,你暗示你的三个现有变量当前存储为SAS "date-time"值 . 试试这个:

    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:

    • A date 是自1960年1月1日以来的天数

    • A time 是午夜以来的秒数

    • A datetime 是自1960年1月1日以来的秒数 .

    并注意 date9. 不是一个函数;这是一种格式 . 有许多不同的格式可用于变量的基础值,但值本身不会改变 . 这是SAS编程真正有用的功能之一 .

  • 2

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

相关问题