2016-12-05 4 views
0

私は、年、月、営業の列を持つデータテーブルを持っています。これは事実上、要約テーブルであり、Excelのピボットテーブルのようです。SASの行/列が表示されない(テーブルの書式設定の問題)

この表では、1か月間の売上が報告されていない場合(すなわち、売上0ではないが売り上げが記載されていないため、SASは特定の月の値を特定できません)、その行全体が消えます。

私はこれが起こらないようにするために、代わりにその行が表示されずに0を表示するようにしたいと思います。すべての行が表示されるように、この形式を変更する方法はありますか?

注:ヶ月ヶ月カレンダされていない、テーブルがproc summaryproc meansを使用して作成されている場合など、あなたがすることを提供したい、出力の並べ替えを達成する1つの方法を2011年

+0

テーブルの作成方法を教えてください。可能なすべての月を見つける場所や方法を説明する必要があります。 – Tom

+0

それは、すべての販売が完了した大きなテーブルから来て、販売の日付と販売の価値。日付はその後、年ごとにグループ化され、月ごとに売上が集計されました。そのため、特定の月に売上がない場合、その月はこの要約表には表示されません(前述)。私が考えることができる唯一の解決策は、ダミーデータを0個の売上で追加することで、それぞれの月(および年)に落ちて表示させることです。 – user43080

+0

月が12を超えることができる理由は、販売が2011年に正式に開始することができたが、実際には2016年に完了する、つまり60か月後に完了するということだ。私はこれがあまりにも解決策を考え出すのにも役に立たないとは思いますが、 – user43080

答えて

2

に関するmonth60を持つことができますあなたのデータの各月の少なくとも1行は、completetypesオプションを使用することです。

これは、その出力を完全にスキップするのではなく、Sex = F、Age = 16の頻度0の行を生成します。

信頼性が高く、労働集約型の方法で、一部の値がデータのどこにも表示されなくても機能する方法は、classdataオプションを使用することです。

data myclassdata; 
    do SEX = 'M','F'; 
    do AGE = 13 to 17; 
     output; 
    end; 
    end; 
run; 

proc summary nway data = sashelp.class classdata=myclassdata exclusive; 
class sex age; 
var weight; 
output out = mysummary2 mean=; 
run; 

ここexclusiveオプションはclassdataデータセット内に存在するレベルの組み合わせに出力を制限します。それがなければ、少なくともcompletetypesを指定したかのように、観察された一方向値に基づいて、すべての可能な組み合わせのクラスデータプラス行に指定された値を取得します。

+0

最後の方法が必要です(データに実際には現れない場所)。しかし、ユーザは、マクロ変数を定義することができます(たとえば、%ReportBasis = Yearをコードの残りの部分に渡して、コードを手動で変更しないようにすることができます)。月単位または年単位で売上を表示するかどうかまたは四半期ごとに。したがって、これらのマクロ変数は、選択されているものに応じてテーブルのレイアウトを変更します。この第2の選択肢は、よりダイナミックに適応させることができますか? – user43080

+0

マクロ変数がprocサマリーで動作していないようです。現時点では、大きなテーブルから変数(マクロの一部)を選択してグループ化するだけのproc sqlです。 – user43080

+0

マクロ変数を使用すると、好きなコードを正しく生成できます。助けを求めたい場合は、procサマリーコードを完全に再現可能な例で別の質問を投稿してください。 – user667489