2017-02-01 4 views
0

私は説明的な統計(手段)が必要な多くの変数を持っています。しかし、列として、カテゴリ変数(AlcCons1)の値を使用したいと思います。カテゴリ変数による統計を使用してテーブルを作成するにはどうすればよいですか?

私はこれを行うために、次のコードを使用:

tabstat Age25_29 Age30_34 ... SmokeY religAtndY, statistics(mean) by(AlcCons1) をそして私はこのような結果を持っている:

AlcCons1 | Age25_29 Age30_34 Age35_39 Age40_44 Age45_49 Age50_54 Age55_59 ---------+---------------------------------------------------------------------- 1 | .0987326 .0936242 .1243994 .1668614 .1579665 .1481626 .1258278 2 | .1037879 .11853 .1451863 .1415631 .1317288 .1231884 .1387164 3 | .0905679 .1151016 .1405161 .1624963 .1506231 .137278 .123246 4 | .0649853 .0716117 .1094201 .1606857 .1786286 .1630888 .1401794 ---------+---------------------------------------------------------------------- Total | .091001 .0986022 .1286311 .1617972 .156643 .144962 .1289952 ------------------------------

どのように列と行を入れ替えることができますか? (テーブルの転置)

+1

文書化されたオプション: 'columns(statistics)'助けを見てください。 –

+0

コード: 'tabstat Age25_29 Age30_34 ...(AlcCons1)列(統計)統計(平均)によって、religAtndY' 'AlcCons1 |平均 --------- + ---------- 1 | .0987326 | .0936242 | .1243994' – user21

+0

これは一見すると面白くて挑戦的な質問です! –

答えて

1

原則として、回答はc(statistics)です。このような例の場合、これは合法であり、一種の転置を生成しますが、結果は正確な転置ではありません。より良いことをするための1つの方法があります。

質問に再現可能な例はありませんので、見つけ出す必要があります。

手段の使用は付随しています。他の統計でも同じ問題が発生します。

これは転置したいテーブルの種類です。

. sysuse census, clear 
(1980 Census data by state) 

. tabstat poplt5-pop65p , s(p50) by(region) 

Summary statistics: p50 
    by categories of: region (Census region) 

region | poplt5 pop5_17 pop18p pop65p 
--------+---------------------------------------- 
    NE | 185188 637731 2284657 364864 
N Cntrl | 327094.5 936449 3126055 521880.5 
    South | 289571.5 880546 2803536 407053.5 
    West | 114731 303176 884987 109220 
--------+---------------------------------------- 
    Total | 227467.5 629654 2175130 370495 
------------------------------------------------- 

トリック1:私たちが集計したいものだけからなるデータセットを得ることによって問題を簡素化します。

. collapse (p50) poplt5-pop65p, by(region) 

. l 

    +---------------------------------------------------------+ 
    | region  poplt5 pop5_17  pop18p  pop65p | 
    |---------------------------------------------------------| 
    1. | NE   185,188 637,731  2,284,657  364,864 | 
    2. | N Cntrl 327,094.5 936,449 3,126,054.5 521,880.5 | 
    3. | South  289,571.5 880,546  2,803,536 407,053.5 | 
    4. | West  114,731 303,176  884,987  109,220 | 
    +---------------------------------------------------------+ 

トリック2つのカテゴリ変数に異なるカテゴリの異なる変数をマッピングするreshapeを使用。

. reshape long pop, i(region) j(age) string 
(note: j = 18p 5_17 65p lt5) 

Data        wide -> long 
----------------------------------------------------------------------------- 
Number of obs.      4 ->  16 
Number of variables     5 ->  3 
j variable (4 values)      -> age 
xij variables: 
       pop18p pop5_17 ... poplt5 -> pop 
----------------------------------------------------------------------------- 

. l, sepby(region) 

    +------------------------------+ 
    | region  age   pop | 
    |------------------------------| 
    1. | NE   18p  2,284,657 | 
    2. | NE  5_17  637,731 | 
    3. | NE   65p  364,864 | 
    4. | NE   lt5  185,188 | 
    |------------------------------| 
    5. | N Cntrl 18p 3,126,054.5 | 
    6. | N Cntrl 5_17  936,449 | 
    7. | N Cntrl 65p  521,880.5 | 
    8. | N Cntrl lt5  327,094.5 | 
    |------------------------------| 
    9. | South  18p  2,803,536 | 
10. | South  5_17  880,546 | 
11. | South  65p  407,053.5 | 
12. | South  lt5  289,571.5 | 
    |------------------------------| 
13. | West  18p  884,987 | 
14. | West  5_17  303,176 | 
15. | West  65p  109,220 | 
16. | West  lt5  114,731 | 
    +------------------------------+ 

トリック3:tabdispを直接使用してください。

. tabdisp age region, c(pop) 

-------------------------------------------------------------- 
      |     Census region     
     age |   NE  N Cntrl  South   West 
----------+--------------------------------------------------- 
     18p | 2,284,657 3,126,054.5 2,803,536  884,987 
    5_17 |  637,731  936,449  880,546  303,176 
     65p |  364,864 521,880.5 407,053.5  109,220 
     lt5 |  185,188 327,094.5 289,571.5  114,731 
-------------------------------------------------------------- 

トリック4:いくつかのクリーンアップが必要な場合があります。

. label def age 1 lt5 2 5_17 3 18p 4 65p 

. encode age , gen(ageclass) label(age) 

. tab ageclass 

    ageclass |  Freq.  Percent  Cum. 
------------+----------------------------------- 
     lt5 |   4  25.00  25.00 
     5_17 |   4  25.00  50.00 
     18p |   4  25.00  75.00 
     65p |   4  25.00  100.00 
------------+----------------------------------- 
     Total |   16  100.00 

. label def age 1 "<5" 2 "5-17" 3 "18-64" 4 "65+", modify 

. tabdisp ageclass region, c(pop) 

-------------------------------------------------------------- 
      |     Census region     
ageclass |   NE  N Cntrl  South   West 
----------+--------------------------------------------------- 
     <5 |  185,188 327,094.5 289,571.5  114,731 
    5-17 |  637,731  936,449  880,546  303,176 
    18-64 | 2,284,657 3,126,054.5 2,803,536  884,987 
     65+ |  364,864 521,880.5 407,053.5  109,220 
-------------------------------------------------------------- 
0

私は、以下のリンクの下に答えが見つかりました:https://www.stata.com/statalist/archive/2005-09/msg00561.html 私はテーブルを移調してみましたので、私はコマンドをインストール:

ssc install tabstatmat, replace

tabstat Age25_29 Age30_34 CurntSmokeY religAtndY, by(AlcCons1) stat(mean) col(stat) long format(%9.2f) save

qui tabstatmat B

matrix B = B'

matrix list B, f(%9.2f)

そして私は私が必要なものを持っている:

B[41,5]
1: 2: 3: 4: Total:
mean mean mean mean mean

Age25_29 0.10 0.10 0.09 0.06 0.09

Age30_34 0.09 0.12 0.12 0.07 0.10

Age35_39 0.12 0.15 0.14 0.11 0.13

Age40_44 0.17 0.14 0.16 0.16 0.16

質問は今(「意味」を削除言葉で1,2,3,4を変更する)ことが良く見えるようにする方法で、その後putexcelコマンドを使用するには?

+0

皮肉なことに、私は 'tabstatmat'の元の作者でしたが、特にこの目的のためには勧めていません。あなたは、マトリックスの統計を変数に変換する必要があります。これは私のソリューションが直接行うものです。元の質問には、結果をMS Excelに入れる動機について言及されていませんでした。 –

+0

リンクを修正するために編集されました。 –

関連する問題