Вот небольшая программа, которая будет делать то, что вы хотите:
program define twoway_stack
syntax namelist(min=2 max=2), color(passthru)
tokenize `namelist'
clonevar cum_`1'1 = `1'1
quietly ds `1'*
local varsn : word count `r(varlist)'
forvalues i = 2(1)`varsn' {
local j= `i' - 1
generate cum_`1'`i' = cum_`1'`j' + `1'`i'
}
forvalues i = `varsn'(-1)1 {
local `1' ``1'' cum_`1'`i'
}
twoway area ``1'' `2', ylabel(#6, labsize(small)) xlabel(, labsize(small)) ///
`color' legend(off)
drop ``1''*
end
Однако, прежде чем вы сможете использовать ее, вам нужно reshape
ваши данные в ширину:
bysort id (year): generate _j = _n
reshape wide sales, i(id)
list id year sales*, abbreviate(10)
+------------------------------------------------------------------+
| id year sales1 sales2 sales3 sales4 sales5 |
|------------------------------------------------------------------|
1. | 1 2008 14965.58 17057.34 12954.57 14300.51 10302.37 |
2. | 2 2009 14773.21 15401.18 18938.47 6867.524 8033.86 |
3. | 3 2010 14715.13 13818.65 17947.21 11730.18 18303.17 |
4. | 4 2011 15497.18 14135.79 11656.78 14073.91 14089.79 |
5. | 5 2012 14315.82 15536.48 18558.03 20955.91 16557.02 |
|------------------------------------------------------------------|
6. | 6 2013 15847.74 12635.27 19202.39 9720.332 11850.86 |
7. | 7 2014 13757 14039.71 12841.58 21224.96 15833.77 |
8. | 8 2015 15205.27 12622.8 11540.77 16300.23 15179.32 |
9. | 9 2016 14638.39 11065.79 14703.59 14302.33 17423.94 |
10. | 10 2017 16436.63 15659.13 14499.94 10353 16907.69 |
|------------------------------------------------------------------|
11. | 11 2018 14334.88 15158.4 18034.31 7803.189 12799.08 |
+------------------------------------------------------------------+
Затем вы запускаете программу twoway_stack
:
twoway_stack sales year, color(teal orange purple red ebblue)
Это вычисляет совокупные значения sales
и рисует их в порядке убывания:
list id year cum_sales*, abbreviate(10)
+----------------------------------------------------------------------------+
| id year cum_sales5 cum_sales4 cum_sales3 cum_sales2 cum_sales1 |
|----------------------------------------------------------------------------|
1. | 1 2008 69580.36 59277.99 44977.48 32022.91 14965.58 |
2. | 2 2009 64014.25 55980.39 49112.87 30174.39 14773.21 |
3. | 3 2010 76514.34 58211.17 46480.99 28533.78 14715.13 |
4. | 4 2011 69453.45 55363.66 41289.75 29632.97 15497.18 |
5. | 5 2012 85923.27 69366.25 48410.34 29852.3 14315.82 |
|----------------------------------------------------------------------------|
6. | 6 2013 69256.59 57405.73 47685.4 28483.01 15847.74 |
7. | 7 2014 77697.02 61863.25 40638.29 27796.71 13757 |
8. | 8 2015 70848.38 55669.06 39368.83 27828.07 15205.27 |
9. | 9 2016 72134.05 54710.1 40407.77 25704.18 14638.39 |
10. | 10 2017 73856.4 56948.71 46595.71 32095.76 16436.63 |
|----------------------------------------------------------------------------|
11. | 11 2018 68129.87 55330.78 47527.59 29493.28 14334.88 |
+----------------------------------------------------------------------------+
Ниже приведен пример дальнейшего редактирования приведенного выше графика в редакторе:
Вы можетеКонечно, вы можете расширить программу, добавив опции в команду twoway area
, чтобы автоматизировать настройку графика.
РЕДАКТИРОВАТЬ:
Когда выГотово, вы можете изменить свои данные обратно в длинную форму, если вам нравится:
reshape long sales, i(id)