Erstellen einer komplexen Matrix

Fragen zu Stata Syntax und Do-Files.

Erstellen einer komplexen Matrix

Beitragvon sise02 » Fr 30. Okt 2020, 18:22

Hallo zusammen,

für ein Projekt muss ich die Rendite von Aktienprortfolien in Quantile gliedern und berechnen. Dafür habe ich bisher den bysort Befehl verwendet, allerdings werden dann die Ergebnisse für jede Quantilsausprägung angezeigt. Diese Daten sind leider zu unübersichtlich, deswegen würde ich sie gerne anders darstellen. Bisher sieht mein Code folgendermaßen aus:

Code: Alles auswählen
foreach var in  $esg{
bysort quantile: egen `var'_N = count(`var')
bysort quantile: egen sum_`var'  = sum (`var')
gen prft_`var' = (1/`var'_N) * sum_`var'
}


Ich hätte die Werte gerne als Tabelle mit folgendem Layout generiert. Ich denke dafür bietet sich eine Matrix an. Leider bin ich noch ziemlich neu in Stata und könnte hilfe gebraucht.


xxxxxxx Quantil 1 Quantil 2 Quantil 3 Quantil 4 Quantil 5
Monat 1
Monat 2

Über Hilfe würde ich mich freuen. Vielen Dank!
sise02
 
Beiträge: 4
Registriert: Mo 26. Okt 2020, 21:49
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Erstellen einer komplexen Matrix

Beitragvon Staxa » Sa 31. Okt 2020, 10:08

Ich denke bei dieser Aufgabe kommt es sehr darauf an, wie deine Datenstruktur aussieht. Vielleicht kannst du mal einen Datenauszug posten mit Dataex (https://www.stata.com/help.cgi?dataex). Quantile gibt nun was an, also ist das eine bereits bestehende Variable? Ganz klar ist mir das noch nicht, was du eigentlich vorhast. Du musst hier nicht zwingend mit einer Matrix arbeiten, mittels postfile kannst du auch bestimmte Ergebnisse in ein neues File schreiben lassen.
Stata für Anfänger: www.statabook.com
Staxa
 
Beiträge: 680
Registriert: Di 27. Feb 2018, 12:56
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Erstellen einer komplexen Matrix

Beitragvon sise02 » Sa 31. Okt 2020, 12:58

Der Code sieht in etwas so aus, nur mit mehr Variablen. Da ich für 17 Jahre untersuchungen anstelle.
z_Y2018 und z_Y2019 verdeutlicht die Quantileinteilung in dem Jeweiligen Jahr. Diese erfolgt nach einem ESG Score (hier nicht abgebildet).
Wie man erkennen kann, wiederholen sich die Werte bei prft_J18M12_t und prft_J19M02_t, aber auch bei allen Variablen oft. Ich benötige jede Quantilsvariable nur einmal.


Code: Alles auswählen
* Example generated by -dataex-. To install: ssc install dataex
clear
input str31 Name byte(z_Y2018 z_Y2019) float(prft_J18M11_t prft_J18M12_t prft_J19M01_t prft_J19M02_t)
"PAYCHEX"                    1 1  -.0538401 .016237509 -.1091165 .11580108
"CERNER"                     1 1  -.0538401 .016237509 -.1091165 .11580108
"HOLLYFRONTIER"              2 1 -.05646232  .02947546 -.1091165 .11580108
"CATALENT"                   1 1  -.0538401 .016237509 -.1091165 .11580108
"NEWS 'B'"                   3 1 -.05767716 .024350084 -.1091165 .11580108
"MID-AMER.APT COMMUNITIES"   1 1  -.0538401 .016237509 -.1091165 .11580108
"T-MOBILE US"                1 1  -.0538401 .016237509 -.1091165 .11580108
"LKQ"                        1 1  -.0538401 .016237509 -.1091165 .11580108
"CENTENE"                    1 1  -.0538401 .016237509 -.1091165 .11580108
"MCKESSON"                   4 1 -.05592528  .03685587 -.1091165 .11580108
"FLEETCOR TECHNOLOGIES"      1 1  -.0538401 .016237509 -.1091165 .11580108
"UNIVERSAL HEALTH SVS.'B'"   1 1  -.0538401 .016237509 -.1091165 .11580108
"NVR"                        1 1  -.0538401 .016237509 -.1091165 .11580108
"CABOT OIL & GAS 'A'"        1 1  -.0538401 .016237509 -.1091165 .11580108
"UNDER ARMOUR A"             1 1  -.0538401 .016237509 -.1091165 .11580108
"BOOKING HOLDINGS"           1 1  -.0538401 .016237509 -.1091165 .11580108
"IPG PHOTONICS"              1 1  -.0538401 .016237509 -.1091165 .11580108
"ROLLINS"                    1 1  -.0538401 .016237509 -.1091165 .11580108
"HENRY SCHEIN"               3 1 -.05767716 .024350084 -.1091165 .11580108
"FISERV"                     1 1  -.0538401 .016237509 -.1091165 .11580108
"SERVICENOW"                 1 1  -.0538401 .016237509 -.1091165 .11580108
"FACEBOOK CLASS A"           1 1  -.0538401 .016237509 -.1091165 .11580108
"LENNAR 'A'"                 1 1  -.0538401 .016237509 -.1091165 .11580108
"COMCAST A"                  4 1 -.05592528  .03685587 -.1091165 .11580108
"COGNIZANT TECH.SLTN.'A'"    4 1 -.05592528  .03685587 -.1091165 .11580108
"EBAY"                       3 1 -.05767716 .024350084 -.1091165 .11580108
"CH ROBINSON WWD."           1 1  -.0538401 .016237509 -.1091165 .11580108
"LAMB WESTON HOLDINGS"       1 1  -.0538401 .016237509 -.1091165 .11580108
"EXTRA SPACE STRG."          1 1  -.0538401 .016237509 -.1091165 .11580108
"DUPONT DE NEMOURS"          . 1 -.11646156 .016521635 -.1091165 .11580108
"D R HORTON"                 1 1  -.0538401 .016237509 -.1091165 .11580108
"TECHNIPFMC"                 3 1 -.05767716 .024350084 -.1091165 .11580108
"CHIPOTLE MEXN.GRILL"        2 1 -.05646232  .02947546 -.1091165 .11580108
"INGERSOLL RAND"             1 1  -.0538401 .016237509 -.1091165 .11580108
"CARDINAL HEALTH"            1 1  -.0538401 .016237509 -.1091165 .11580108
"JACK HENRY AND ASSOCIATES"  1 1  -.0538401 .016237509 -.1091165 .11580108
"CHARTER COMMS.CL.A"         1 1  -.0538401 .016237509 -.1091165 .11580108
"TWITTER"                    1 1  -.0538401 .016237509 -.1091165 .11580108
"PAYCOM SOFTWARE"            1 1  -.0538401 .016237509 -.1091165 .11580108
"CONSTELLATION BRANDS 'A'"   2 1 -.05646232  .02947546 -.1091165 .11580108
"SBA COMMS."                 1 1  -.0538401 .016237509 -.1091165 .11580108
"JACOBS ENGR."               1 1  -.0538401 .016237509 -.1091165 .11580108
"BROADRIDGE FINL.SLTN."      2 1 -.05646232  .02947546 -.1091165 .11580108
"AT&T"                       1 1  -.0538401 .016237509 -.1091165 .11580108
"GENERAL ELECTRIC"           2 1 -.05646232  .02947546 -.1091165 .11580108
"METLIFE"                    2 1 -.05646232  .02947546 -.1091165 .11580108
"EXPEDIA GROUP"              1 1  -.0538401 .016237509 -.1091165 .11580108
"WALT DISNEY"                5 1  -.0628689  .01865047 -.1091165 .11580108
"FOX B"                      . 1 -.11646156 .016521635 -.1091165 .11580108
"OLD DOMINION FGT.LINES"     1 1  -.0538401 .016237509 -.1091165 .11580108
"DOMINO'S PIZZA"             1 1  -.0538401 .016237509 -.1091165 .11580108
"BIO-RAD LABORATORIES 'A'"   1 1  -.0538401 .016237509 -.1091165 .11580108
"VIACOMCBS B"                1 1  -.0538401 .016237509 -.1091165 .11580108
"ALIGN TECHNOLOGY"           1 1  -.0538401 .016237509 -.1091165 .11580108
"ABIOMED"                    1 1  -.0538401 .016237509 -.1091165 .11580108
"QUALCOMM"                   1 1  -.0538401 .016237509 -.1091165 .11580108
"TRANSDIGM GROUP"            1 1  -.0538401 .016237509 -.1091165 .11580108
"EQUIFAX"                    1 1  -.0538401 .016237509 -.1091165 .11580108
"FOX A"                      . 1 -.11646156 .016521635 -.1091165 .11580108
"ZEBRA TECHNOLOGIES 'A'"     1 1  -.0538401 .016237509 -.1091165 .11580108
"QORVO"                      1 1  -.0538401 .016237509 -.1091165 .11580108
"COPART"                     1 1  -.0538401 .016237509 -.1091165 .11580108
"BROADCOM"                   1 1  -.0538401 .016237509 -.1091165 .11580108
"TAKE TWO INTACT.SFTW."      2 1 -.05646232  .02947546 -.1091165 .11580108
"VISA 'A'"                   4 1 -.05592528  .03685587 -.1091165 .11580108
"GLOBAL PAYMENTS"            1 1  -.0538401 .016237509 -.1091165 .11580108
"NEWS 'A'"                   3 1 -.05767716 .024350084 -.1091165 .11580108
"NETFLIX"                    1 1  -.0538401 .016237509 -.1091165 .11580108
"UNDER ARMOUR 'C'"           1 1  -.0538401 .016237509 -.1091165 .11580108
"HNTGTN.INGALLS INDS."       1 1  -.0538401 .016237509 -.1091165 .11580108

end
sise02
 
Beiträge: 4
Registriert: Mo 26. Okt 2020, 21:49
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Erstellen einer komplexen Matrix

Beitragvon Staxa » Sa 31. Okt 2020, 15:26

Ganz klar was nun wie summiert werden soll ist das mir weiterhin nicht, aber mit einem postfile Befehl ist das flexibel. Zudem scheinen hier die Quantile immer Quintile zu sein, da immer 5. Hier könnte man das so machen.


Code: Alles auswählen
tempfile file
tempname name
postfile `name' str32 varname quintil name using `file'

foreach VAR of varlist x1 x2 x3 {   //loopen ueber alle vars
    foreach Q of numlist 1/5 {   //loopen ueber alle 5 quintile
        sum `VAR' if quantile == `Q'
        post `name' (`VAR') (`Q') (r(mean))
    }
}
postclose `name'
use `file', clear
list


Wie nun genau die Monate hier einbezogen werden ist mir ebenfalls unklar. Das Code Grundgerüst ist aber flexibel, möchte man nun alles separat nach Monat so muss man eben eine weitere Schleifenebene einbauen und die if Bedingung bei sum anpassen. Für Details siehe help postfile

EDIT: auch denkbar wäre eine Lösung mit collapse (help collapse)
Stata für Anfänger: www.statabook.com
Staxa
 
Beiträge: 680
Registriert: Di 27. Feb 2018, 12:56
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Stata Syntax

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron