你基本上有兩種選擇,它們在你遇到的問題種類上很相似:使用PROC TABULATE
,這更自然地處理多個表格輸出,或者使用已經調用的onewayfreqs
輸出對於。
這樣做的問題是,變量可能是不同的類型,所以它沒有一列包含所有這些信息 - 它有一對每個變量的列,顯然有點...亂。即使你的變量都是相同的類型,SAS不能認爲這是一般規則,所以它不會爲你產生一個好的整潔的東西。
儘管你可以做什麼,特別是如果你能夠使用格式化值(要麼因爲想要,要麼因爲它們是相同的!),將它們合併成一個結果。
例如,假設你從上面的數據集freq1
:
data freq1_out;
set freq1;
value = coalesce(of f_:);
keep table value frequency percent;
run;
,結合了F_變量爲一個變量(如永遠只有一個是不斷填充)。如果你不能使用F_變量並且需要原始變量,那麼你必須使用宏變量列表(或者其他一些方法,或者只是輸入全部名稱)來使用coalesce來創建自己的變量列表。
最後,你可以使用PROC SQL
來產生一個相當類似的表,儘管我可能不會使用宏語言來做。 UNION ALL
在這裏是一個方便的工具;基本上你必須爲每個變量單獨的子查詢與group by
變量,所以
proc sql;
create table my_freqs as
select 'HEIGHT' as var, height, count(1) as count
from sashelp.class
group by 1,height
union all
select 'WEIGHT' as var, weight, count(1) as count
from sashelp.class
group by 1,weight
union all
select 'AGE' as var, age, count(1) as count
from sashelp.class
group by 1,age
;
quit;
那當然可以平凡macrotized爲類似
proc sql;
create table my_freqs as
%freq(table=sashelp.class,var=height)
union all
%freq(table=sashelp.class,var=weight)
union all
%freq(table=sashelp.class,var=age)
;
quit;
甚至進一步要麼與列表處理或宏循環。
來源
2015-10-14 20:37:25
Joe
我的壞,喬,並不意味着要創建另一個「答案」。我將其刪除並標記爲最有用的答案。謝謝! – Mike