是否可以用数组替换列?
我有一个从1到24的列,我想用一个包含24个不同元素的数组替换它。
我该怎么做呢?
谢谢!
答案 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
选择性地(在达到边界条件之后)将用于每个[无论]输出一行。
还有其他选择;你甚至可以将它加载到哈希表中,然后将其卸载到一个数组中,如果你有理由这样做(我不能想到一个,但谁知道)。