我有以下问题:
我需要在矩阵中写一个开始和结束日期。矩阵包含柱中的年度(1-4),行是年份。
E.g。
矩阵:
Q1 Q2 Q3 Q4
2010
2011
现在,日期 01.01.2010 应放在第一个元素中,日期 09.20.2011 应放在六元素中。
提前致谢。
答案 0 :(得分:3)
首先,您必须考虑SAS实际上没有日期/时间/日期时间变量。它只使用格式化为日期/时间/日期时间的数字变量。实际值是:
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;