如何将日期(MM / DD / YY)写入矩阵(SAS)

时间:2014-05-08 05:14:51

标签: matrix sas

我有以下问题:

我需要在矩阵中写一个开始和结束日期。矩阵包含柱中的年度(1-4),行是年份。

E.g。

矩阵:

Q1 Q2 Q3 Q4 
            2010
            2011

现在,日期 01.01.2010 应放在第一个元素中,日期 09.20.2011 应放在六元素中。

提前致谢。

1 个答案:

答案 0 :(得分:3)

首先,您必须考虑SAS实际上没有日期/时间/日期时间变量。它只使用格式化为日期/时间/日期时间的数字变量。实际值是:

  • 天自1960年1月1日起的日期
  • 秒00:00以后
  • 秒自1960年1月1日00:00为日期时间

SAS甚至不区分整数和浮点数字类型。因此日期值可以包含小数部分。

您使用SAS数字变量做什么或可以做什么完全取决于您,主要取决于您应用的格式。您可能会错误地格式化包含日期时间格式的日期值的变量...甚至是货币格式...... SAS不会注意或抱怨。

您还必须考虑SAS实际上甚至没有矩阵和数组。它确实提供了一种模拟其用于读取和写入数据集变量的方法。

尽管如此,SAS确实提供了许多格式和信息,允许您实现日期和时间操作。

假设您正在数据步骤中编码,并假设“日期”在数据集数值变量中,那么PUT函数可以提取您需要计算要写入的矩阵元素的行,列的日期部分,如下所示:

DATA table;
   ARRAY dm{2,4} dm_r1c1-dm_r1c4 dm_r2c1-dm_r2c4;
   beg_row = PUT(beg_date, YEAR4.)-2009;
   end_row = PUT(end_date, YEAR4.)-2009;
   beg_col = PUT(beg_date, QTR1.);
   end_col = PUT(end_date, QTR1.);
   dm{beg_row,beg_col} = beg_date;
   dm{end_row,end_col} = end_date;
RUN;

...或者如果您使用的是一维数组:

DATA table;
   ARRAY da{8} da_1-da_8;
   beg_index = 4 * (PUT(beg_date, YEAR4.)-2010) + PUT(beg_date, QTR1.);
   end_index = 4 * (PUT(end_date, YEAR4.)-2010) + PUT(end_date, QTR1.);
   da{beg_index} = beg_date;
   da{end_index} = end_date;
RUN;