将 proc freq 输出转换为数据集

Converting proc freq output into a dataset

我有一个包含 564 个变量的 sas 数据集。我需要创建一个包含三列的新 table,column1 将是变量名称,column2 将是该变量的值,column3 将是观察编号。 因此,如果我有一个变量性别,那么性别将在变量列中列出 2 次,并且性别值将在第一行中列为 m,在第二行中列为女性,而 column3 将只是观察的编号.它应该是这样的。非常感谢。

var    value obs
gender m      1
gender f      2
ans    yes    3
ans    no     4

PROC FREQ 中得到 table 的关键是 ods outputcoalescec.

相结合

ODS OUTPUT 可让您告诉 PROC FREQ 将所有内容放入一个数据集中(与 out= 相反,后者仅将一个 Freq table 放入一个数据集中)。这会给你一个稍微混乱的结果,然后我们使用 coalescec 来修复。该函数采用变量列表和 returns 来自它们的第一个非缺失值;由于 F_ 变量总是只填充一个值(table 中变量的格式化值),因此很容易使用它们。

ods output onewayfreqs=freqs;
proc freq data=sashelp.class;
  tables age sex;
run;
ods output close;  *technically unneeded but makes it more clear;

data want;
  set freqs;
  value = left(coalescec(of f_:));
run;

你上面提到的其余内容在该数据集中是微不足道的。