2017-04-19 11 views
1

私はクラス変数内のby-variableの発生を単純にカウントしていますが、クラス変数全体の合計カウントの名前を変更する方法は見つけられません。現時点では、出力データセットには、各グループ内のすべてのクラスタ2のカウントと、すべてのグループ(つまり、使用されるクラス変数)の合計カウントが含まれています。ただし、クラス内のカウントは名前が付けられ、合計は空の文字列で示されます。Proc手段のクラス変数全体の名前の変更方法

コード:出力ファイルの

proc means data=seeds noprint; 
    class group; 
    by cluster2; 
    id label2; 
    output out=seeds_counts (drop= _type_ _freq_) n(id)=count; 
run; 

例:当然

cluster2 group label2 count 
7     area 1 20 
7   sa  area 1 15 
7   sb  area 1 5 
15     area 15 42 
15   sa  area 15 18 
.... 

、「合計」にemtpy文字列は別々のdatastepで達成することができ、名前の変更、私はそれをやりたいですProc Means-stepで直接実行します。それは単純で些細なものでなければならないが、これまでのところ見つけられていない。その後、データセットを転置する必要があります。つまり、emtpy文字列を変更する必要があるか、またはproc転置で削除する必要があります。

+0

サマリーテーブルとして合計を使用する場合は、代わりにPROC TABULATEを使用します(PROC MEANSではなく)。 – Reeza

+0

@Reeza同じテーブル内の個々のグループの合計とカウントの両方を後で転置したい(ピボットテーブルと同じ結果を得る)。 Proc Tabulateを使ってこれを行うことはできますか?私はその手続きにあまり慣れていない。 – fileunderwater

+1

これはまさにPROC TABULATEが設計したものです。私は紙を勧めますが、良いものは見つけられません。しかし、ここにはたくさんあります。http://lexjansen.com/search/searchresults.php?q = proc%20tabulate – Reeza

答えて

0

私はそれを直接行う方法はわかりませんが、あなたには分かち合うことができます。欠けているのではなく「合計」を表示するようSASに指示することができます。

proc format; 
    value $MissTotalF 
    ' ' = 'Total' 
    other = [$CHAR12.]; 
quit; 

proc means data=sashelp.class noprint; 
    class sex; 
    id age; 
    output out=sex_counts (drop= _type_ _freq_) n(age)=count; 
    format sex $MissTotalF.; 
run; 

たとえば、私はまた、PROC MEANSの代わりにPROC TABULATEを使用することをお勧めします。この場合、実際にはあまり効果がありませんが

+0

これを別のステップなしで処理する方法はありませんか?そんなに些細なことのために別のステップを追加するのはとても不器用なようです。あなたはProc Tabulateでグループと合計のより良いラベルを取得しますか? – fileunderwater

1

classステートメントの変数が数値の場合、結果の列は数値になります。したがって、@Joeの回答と同様の形式を使用しない限り、合計語を追加できません)。 class変数が数値または文字のいずれかになる可能性があるため、これは値が欠落している理由になります。

ここに数値クラス変数の例を示します。ほとんどあなたがそれをしたいか、結果を表示することができproc tabulateを使用

proc sort data=sashelp.class out=class; 
by sex; 
run; 

proc means data=class noprint; 
class age; 
by sex; 
output out=class_counts (drop= _:) n=count; 
run; 

は、しかし、出力データセットは同じ欠損値を持つことになりますので、本当に助けにはなりません。ここにいくつかの例があります。

proc tabulate data=class out=class_tabulate1 (drop=_:); 
class sex age; 
table sex*(age all='Total'),n=''; 
run; 

proc tabulate data=class out=class_tabulate2 (drop=_:); 
class sex age; 
table sex,age*n='' all='Total'; 
run; 

私はあなたの最終的な目標を達成するための最良のオプションは、データを転置し、最終的にそれぞれを合計して合計列を作成し、データのステップを書き、その後、小計を削除するであろう、proc meansnwayオプションを追加することだと思います行。それは3つのステップですが、多くのコーディングは必要ありません。

+0

+私が知りませんでした "drop = _:"ワイルドカード用。 – fileunderwater

0

合計と詳細を個別に処理できるように、_TYPE_変数を利用して使用できる1つの方法です。不足している値のクラスがある場合(全体の要約レコードとは別に)、PROC TRANSPOSEに問題があります。

proc means data=sashelp.class noprint; 
    class sex; 
    id age; 
    output out=sex_counts (drop= _freq_) n(age)=count; 
run; 
proc transpose data=sex_counts out=transpose prefix=count_ ; 
    where _type_=1 ; 
    id sex ; 
    var count; 
run; 
data transpose ; 
merge transpose sex_counts(where=(_type_=0) keep=_type_ count); 
rename count=count_Total; 
drop _type_; 
run; 
+0

転置の代わりにSTACKODSオプションを見てください。 – Reeza

関連する問題