用阵列替换整个列 - SAS

时间:2017-06-13 16:56:13

标签: arrays sas

是否可以用数组替换列?

我有一个从1到24的列,我想用一个包含24个不同元素的数组替换它。

我该怎么做呢?

谢谢!

2 个答案:

答案 0 :(得分:1)

听起来你想转移这张桌子。

data have;
do i=1 to 24;
  output;
end;
run;

proc transpose data=have out=want;
run;

查看PROC TRANSPOSE上的文档以获取更多信息和选项。 http://support.sas.com/documentation/cdl/en/proc/70377/HTML/default/viewer.htm#n1xno5xgs39b70n0zydov0owajj8.htm

答案 1 :(得分:0)

除了proc transpose之外还有其他一些方法;我建议对于大多数用例,但还有其他情况适合做其中一个。

最简单的方法是使用set语句将其加载到数组中。这是设置一个temporary数组的常用方法,该数组以非常类似的方式用于哈希表 - 在哈希表位于基本SAS之前,事实上,这就是很多工作的完成方式。

请注意以下使用do while,即使我正在搜索not条件;由于该声明的时间安排,你不能在这里使用do until(尝试一下,看看你能否弄清楚原因)。

data want;
  array ages[19] _temporary_;
  do _n_ = 1 by 1 while (not eof);  *iterate over `class` and load the array;
    set sashelp.class(keep=age) end=eof;
    ages[_n_] = age;
  end;
  call missing(age);       *not really needed;

  call sortn(of ages[*]);  *sort ascending;

  set sashelp.class;       *now the data step loop pulls one record at a time;
  age_rank = whichn(age, of ages[*]);  *calculates the rank of age;
run;

当然,如果要将数组中的变量存储在数据集中,请不要使用_temporary_。请记住,array是一个数据步骤构造,永远不会持续存在;您必须重新声明要使用它的每个数据步骤的数组,但变量显然已经存在。

最后,如果你想要更少的行,output选择性地(在达到边界条件之后)将用于每个[无论]输出一行。

还有其他选择;你甚至可以将它加载到哈希表中,然后将其卸载到一个数组中,如果你有理由这样做(我不能想到一个,但谁知道)。