【发布时间】:2018-02-04 02:51:54
【问题描述】:
数据集如下所示:
colx coly colz
0 1 0
0 1 1
0 1 0
需要的输出:
Colname value count
colx 0 3
coly 1 3
colz 0 2
colz 1 1
以下代码完美运行...
ods output onewayfreqs=outfreq;
proc freq data=final;
tables colx coly colz / nocum nofreq;
run;
data freq;
retain colname column_value;
set outfreq;
colname = scan(tables, 2, ' ');
column_Value = trim(left(vvaluex(colname)));
keep colname column_value frequency percent;
run;
...但我认为这不是有效的。假设我有 1000 列,在所有 1000 列上运行 prof freq 效率不高。有没有其他有效的方法不使用 proc freq 来完成我想要的输出?
【问题讨论】:
-
我认为这是最好的。您可以使用
_all_关键字而不是键入所有列名。 (tables _all_ / nocum nofreq;) -
这在什么意义上没有效率?你只运行一次 proc freq 。可能可以编写一个使用稍微少一点内存的等效数据步骤,但除非证明这对您来说是一个限制因素,否则我不会打扰。
-
我觉得带有 proc freq 的 odsoutput 正在减慢并创建大量日志和输出。想想 10,000 个变量和百万条记录。我觉得应该有另一种方法来实现这一点,数组似乎很合适