STATA A WORKFLOW APPROACH... Version 12 / 2012 Jakob Hjort, DataManager, MPH 1
3. Hent, sammenkør & gem 4. Inspicér, oprens & klargør 5. Dokumentation 6. Variabel behandling (numeriske-/talvariable) 7. Variabel behandling (streng-/tekstvariable) 8. Variabel behandling (dato variable) 9. Variabel behandling (time/klokkeslæt variable) 10. Missing values 11. Deskriptiv statistik 12. Analytisk statistik 13. Grafer I/II 14. Grafer II/II Appendiks: Generel kommando-opbygning Logiske udtryk Stata som regnemaskine (immediate kommandoer) Yderligere ressourcer 2
HENT, SAMMENKØR, GEM use (sti &) filnavn use data2004.dta, clear (use (sti &) filnavn A, clear) append using (sti &) filnavn B (use data2004.dta, clear) append using data2005.dta sort var(s) sort cpr gsort -cpr (use (sti &) filnavn A, clear) merge var(s) using (sti &) filnavn B 1:1 merge 1:m var(s) using (sti &) filnavn B m:1 V...10: cd sti cd c:\data Ver. 11..: (use data2004.dta, clear) merge cpr using extra_data.dta merge 1:1 cpr using extra_data.dta duplicates list var(s) duplicates list cpr V...10: Ver. 11..: save (sti &) filnavn, replace save data_samlet.dta, replace A B A B 1:1 match A B 1:mange match Angiv arbejdsbibliotek på disk. Arbejdsbiblioteket er der hvor Stata forventer at finde data, men også der hvor Stata som udgangspunkt vil placere output og filer. Hent et datasæt fra disk (harddisk, CD eller andet) ind i data editor. Takket være cd (ovenfor) angives kun selve filnavnet. Clear tillader at evt data i data editor ryddes (overskrives). Tilføj extra observationer/cases (datasæt B) til data editor (datasæt A). Bruges f.eks. til at kombinere data fra to årgange i eet datasæt. Operationen giver umiddelbart kun mening hvis de to datasæt (A & B) er helt (eller næsten) ens hvad angår variable. Vær navnlig opmærksom på eventuelle variable med samme navn men forskelligt indhold. Sortér data i stigende orden efter valgfri(e) variable. Første variabel er primære nøgle, en evt efterfølgende variabel bliver sekundær nøgle etc... gsort giver mulighed for at sortere i faldende orden (-) Tilføj extra variable (fra datasæt B) til data editor (datasæt A). Observationer fra datasæt B kobles med observationer fra datasæt A ved sammefald i nøgleværdi(er). Nøgle-variable SKAL have samme navn(e). I ver. 10 (ikke 11!) SKAL datasæt A & B være sorteret. Variablen: _merge genereres automatisk og vil for hver observation antage værdien: 1 (kun A), 2 (kun B) el. 3 (A & B). mange-til-mange match er noget rod som sikkert bør håndteres helt anderledes. Check for eventuelle dubletcases med kommandoen: duplicates list. Gem datasæt fra data editor på disk. Replace (til sidst) tillader at evt eksisterende fil overskrives. Det er kun sjældent nødvendigt/hensigtsmæssigt at gemme data; enten fordi data ikke er (bevist) ændret eller fordi evt. ændringer let kan genetableres via do-files. 3
INSPICÉR, OPRENS & KLARGØR summarize var(s) summarize dag maaned aar lookfor søgestreng lookfor medicin Et første orienterende overblik over data... Variabeloversigt med angivelse af antal (ikke-missing) observationer, gennemsnit, standard dev. samt minimum og makismum værdier. Variabeloversigt over alle variable hvor søgestreng indgår i enten variabelnavn eller variabellabel. codebook var(s) codebook dag maaned aar evt +:, compact Kodebog: udvidet variabeloversigt: variable, variabel- og valuelabels mm. Inklusiv noget basal statistik. Angivet uden variable-liste udløses oversigt over alle var. drop var(s) drop dag maaned aar X X Slet variable (fra data editor). Virkningen bliver permanent når/hvis data efterfølgende gemmes vær derfor kritisk: check dig selv. drop if logisk-udtryk drop if ryger==1 X X Slet observation/case (fra data editor) Virkningen bliver permanent når/hvis data efterfølgende gemmes vær derfor kritisk: check dig selv. order var(s) order cpr Arrangér udvalgte variable i en ønsket rækkefølge fra start (første kolonne) Har ingen betydning for selve informationen i data, men kan være med til at lette overblikket væsentligt. order var(s), after(start-var) order bmi, after(weight) Arrangér udvalgte variable i en ønsket rækkefølge lige efter en specificeret kolonne (variabel). En nyberegnet BMI (udfra højde og vægt) vil ligge i sidste kolonne. Hermed kan den flyttes hen til højde & vægt. collapse (aggregat funktion) var(s), by(gruppevar(s)) collapse (sum) ant_dage, by(cpr) A B A A B B B Saml (aggregér) observationer/cases i grupper med fælles karakteristika. Udover sum kan der angives: min, max, mean, count m.fl. 4
DOKUMENTATION label variable var label variable ryger Ryger patienten? Tilknyt labels til variable: Proceduren for variable labels er meget ligefrem (!). label define varlabel Val1 Val1Label Val2 Val2Label... label values var(s) varlabel label define yesno 1 Ja 2 Nej label values ryger yesno numlabel,add numlabel,remove evt. +:, modify Tilknyt labels til variable values: Labeling af values er lavet på den måde at man først definere et navngivet labelsæt, som derefter tilknyttes variable(n). Besværligt? Måske, men fordelen er at labelsæt kan genbruges og hæftes på flere variable. Vis både values og labels i tabeller mv. * kommentar alternativt: // kommentar Kommentarer i do-files. Hvad der i kampens hede virker logisk og ligefremt, kan ved gensyn efter et par måneder virke ret kryptisk, - rigelige kommentarer kan afhjælpe dette problem. capture log close log using navn_på_log_fil, text replace capture log close log using oprensning.log", text replace log close Tip: Ved at navngive loggen med endelsen: *.doc - vil den ved dobbeltklik, automatisk blive åbnet i Word. : Afslutter log-føringen Logning Enkel håndtering af logning, som logger med et indhold svarende til result-vinduet, Grafik må håndteres separat. Det er MEGET fornuftigt at give loggen samme navn som do-filen!! i eksemplet: oprensing Placer de to linier (capture log... hhv log using ) øverst og log close i slutningen af do-filen, og der vil altid foreligge en opdateret logfil. 5
VARIABEL BEHANDLING (NUMERISKE- / TALVARIABLE) generate Nyvar num =1 / replace Nyvar num =2 << Beregner/opretter/erstatter variabel. Findes variablen (Nyvar) i forvejen er man nødt til enten at benytte replace eller starte med: drop var. Nyvar num =var1+var2 : addition Nyvar num =var1- var2 : substraktion Nyvar num =var1*var2 : multiplikation Nyvar num =var1/var2 : division Nyvar num =mod(var1,var2) : divisions-rest Nyvar num =sqrt(var) : kvadratrod Nyvar num =var^n : opløftning i n de (eks: var^2 = var*var) Regne-arter taler vel for sig selv Kan sættes sammen i eet væk benyt rigeligt med parenteser, for at sikre at beregningsudtryk udregnes (evalueres) i korrekt rækkefølge (eks.: BMI=vægt/højde*højde vs BMI=vægt/(højde*højde). format var %5.2f Nyvar num =round(var) Nyvar num =int(var) : Heltals afrunding (.0-.4 rundes ned/.5-.9 rundes op) : Trunkering evt. decimaler ignoreres (skæres bort) Nyvar num =round(var,0.1) : Afrunding til et ønsket antal decimaler (i eks.: 1) : Formaterer (i eks.: 5 pladser hvoraf 2 er decimaler) recode var num (fra1/til1=1)(fra2/til2=2)(fra3/til3=3), generate(nyvar num ) recode alder (min/26=1)(26/65=2)(65/max=3), generate(aldergr) recode alder (min/26=1 unge )(26/65=2 ældre )(65/max=3 gamle ), generate(aldergr) Afrunding sommetider giver beregninger (f.eks. af BMI) resultater med flere decimaler end data egentlig kan bære, det eneste rimelige i disse situationer er at afrunde. Formatér er også en slags afrunding (Hvad man ikke ser har man ikke ondt af!) Omkoder (grupperer) kontinuerte variable til kategorier. Bemærk: recode kan hæfte labels på kategorier i eet hug., generate bevarer den originale variabel. recode udd5 (1 2=1 Læge/tandlæge )(3=2 sygepl. )(4 5=3 terapeuter ), generate(udd3) Nyvar num =real(var str ) : Let at bruge MEN egner sig kun til små tal ( CPR!) destring var str, generate(nyvar num ) encode var str, generate(nyvar num ) : Destring oversætter direkte og kræver derfor at indholdet af var svarer til (kan læses som) et tal. : Encode konverterer kategoriske strengværdier til numeriske koder (1,2 n), - oprindelige streng-værdier udgør nye labels! Samme kommando omkoder (omgrupperer) kategori variable til andre kategorier. Konverterer en streng- til en numerisk variable. Konverterer en streng- til en numerisk variable. Destring kan f.eks. bruges til at konvertere CPR-numre fra streng- til numeriskformat. PAS PÅ CPR-FÆLDEN!!!! Cpr-numre (kodet numerisk) kan i STATA, i lighed med dato/klokkeslæt variable (se side 9), kun rummes i formatet: double I andre formater sker der, UANMELDT, højst uhensigtsmæssige ændringer af variabel indhold dvs cpr bliver uigenkendeligt fadæsen er irreversibel 6
VARIABEL BEHANDLING (STRENG- / TEKSTVARIABLE) generate Nyvar str = Nyoprettet streng-variabel / replace Nyvar str = Ændret streng-variabel << Beregner/opretter/erstatter streng variable. Findes variablen (Nyvar) i forvejen er man nødt til enten at benytte replace eller starte med drop var. Nyvar str = var1 str + + var2 str : Sætter var1 og var2 sammen med et mellemrum Nyvar str = substr(var str,pos,lng) : Returnerer den del af var som starter ved POS og fortsætter LNG-tegn frem. Nyvar num = length(var str ) : Returnerer længden af det faktiske indhold af var Sætter strenge sammen (i forlængelse af hinanden) Isolér delstreng af streng Returnerer længden af streng-variabel. Nyttig både hvis man med substr skal isolere en venstre-del af en streng, og hvis man f.eks. ønsker at indsætte et foranstillet 0 i cpr-numre med længden 9. Nyvar str = upper(var str ) Nyvar str = lower(var str ) Nyvar str = proper(var str ) : Konverterer var til store bogstaver : Konverterer var til små bogstaver : smukkeserer var: Store begyndelses bogstaver og i øvrigt små bogstaver Formatér Nyvar = index(var str,tekst) : Returnerer position for Tekst i var hvis Tekst ikke findes i var returneres: 0. Index er følsom for store/små bogstaver (benyt upper eller lower) Find tekst i streng. Index returnerer position, hvilket man vel sjældent er interesseret i derimod kan det være meget anvendeligt at afgøre om f.eks. et bestemt præparat står anført i en streng indeholdende medicinforbrug. Nyvar str = string(var num ) : Konverterer den numeriske var ( råt ) til en streng Nyvar str = string(var num, %10.0f ) : Konverterer den numeriske var i formatet %10.0f (se variable behandling (numeriske-/ ) : format) Konverterer en numerisk variabel til en streng. String kan f.eks. bruges til at konvertere CPR-numre i numerisk format til strengformat (modsat real). 7
VARIABEL BEHANDLING (DATO VARIABLE) generate Nyvar dato =d(15.06.1998) / replace Nyvar dato =d(15.08.1998 ) << Beregner/opretter/erstatter dato-variabel Findes variablen (Nyvar) i forvejen er man nødt til enten at benytte replace eller starte med drop var. Nyvar dato =mdy(måned,dag,år) : år SKAL angives som 4 cifret årstal. Komponerer dato-variabel udfra: dag, måned og år. Datoen optræder i første omgang som antal dage fra 1. januar 1960, og skal formateres for at se ordentlig ud. Nyvar num =day(var dato ) Nyvar num =month(var dato ) Nyvar num =year(var dato ) : isolerer dag i måned (numerisk: 1-31) udfra en dato : isolerer måned (numerisk: 1-12) udfra en dato : isolerer (numerisk 4 cifret) år udfra en dato Opsplitter dato-variabel i hhv dag, måned og år Nyvar num =var1 dato -var2 dato : Returnerer antal dage mellem de to datoer Trækker to datoer fra hinanden Man kan selvfølgelig også lægge to datoer sammen, men det giver bare ingen mening, da hver dato blot er en afstand (antal dage) fra 1. januar 1960. Nyvar=var1 dato -var2 num Nyvar=var1 dato +var2 num : Returnerer ny dato (var1 dato et antal dage (var2)) : Returnerer ny dato (var1 dato + et antal dage (var2)) Trækker et antal dage fra en dato / lægger et antal dage til en dato format var dato %d format var dato %dd/n/y format var dato %dd-n-cy : Formaterer svarende til: 15jun1998 : Formaterer svarende til: 15/06/98 : Formaterer svarende til: 15-06-1998 Formaterer en dato variable. Det kan virke overraskende at måned, i eksemplerne, angives som: N! M resulterer i måneds navne (forkortet) og N resulterer i måneds nummer (1-12). format var dato %5.0f : Formaterer f.eks.: 15jun1998 til 14045 (14045 = antal dage mellem 1/1 1960 og 15/6 1998) Konverterer en dato- til en numerisk variabel. Datoer er i Stata grundlæggende numeriske variable med dato formatering, hvorfor tricket er at udskifte dato-formatering med en numerisk formatering. Det er ofte hensigtsmæssigt/nødvendigt at inspicere data i data editor / browser efter beregninger, omkodninger mv. -ved store datasæt vil man dog ofte have gavn af at skrive: browse var(s) (f.eks. browse cpr barndato alder), hvorved der åbnes en data browser med kun de angivne variable 8
VARIABEL BEHANDLING (TIME/KLOKKESLÆT VARIABLE) generate double Nyvar time =hms(12,24,00) / replace double Nyvar time =hms(12,25,00) Komponerer en time-variabel udfra: timer, minutter og sekunder samt evt.: dag, måned og år Hvis ikke der angives dato informationer, tildeler Stata automatisk datoen: 1. januar 1960. generate double Nyvar time =mdyhms(15,06,1998,12,24,00) / replace double Nyvar time =mdyhms(15,08,1998,12,25,00) Nyvar dato =dofc(var time ) OBS: Time-variable er et antal millisekunder, og kan derfor blive et MEGET stort tal man skal derfor AKTIVT angive double efter generate/replace Skræller klokkeslætsdelen af en time-variable = konverterer til en dato-variabel. Nyvar num =year(dofc(var time )) Nyvar num =month(dofc(var time )) Nyvar num =day(dofc(var time )) Nyvar num =hh(var time ) Nyvar num =mm(var time ) Nyvar num =ss(var time ) Opsplitter time-variabel i hhv.: år, måned, dag, timer, minutter og sekunder. Nyvar num =var1 time -var2 time : Antal millisekunder mellem de to klokkeslæt Nyvar num =int((var1 time -var2 time )/1000) - omregnet til hele sekunder Nyvar num =int((var1 time -var2 time )/60000) - omregnet til hele minutter Trækker to time-variable fra hinanden. Resultatet kommer umiddelbart i millisekunder, men kan naturligvis bare omregnes Nyvar num =int((var1 time -var2 time )/3600000) - omregnet til hele timer Nyvar num =int((var1 time -var2 time )/86400000) - omregnet til hele døgn Nyvar time =var1 time - hms(var2 num,00,00) Nyvar time =var1 time - hms(00,var2 num,00) Nyvar time =var1 time - hms(00,00,var2 num ) Nyvar time =var1 time +hms(var2 num,00,00) Nyvar time =var1 time +hms(00,var2 num,00) Nyvar time =var1 time +hms(00,00,var2 num ) - valide var2 num værdier: 00..23 - valide var2 num værdier: 00..59 - valide var2 num værdier: 00..59 - valide var2 num værdier: 00..23 - valide var2 num værdier: 00..59 - valide var2 num værdier: 00..59 Trækker et antal timer, minutter eller sekunder fra en time-variabel Lægger et antal timer, minutter eller sekunder til en time-variabel format var time %tc : Formater f.eks: 1218803100000 til 15jun1998 12:25:00 (1.218.803.100.000 er tidsrummet fra den 1/1 1960 klokken 00:00:00 til den 15/06 1998 klokken 12:25:00 i millisekunder!!) Formaterer en time-variabel til noget læsbart. Det er ikke umiddelbart muligt/hensigtsmæssigt at skjule datoen i en time-variabel. 9
MISSING VALUES Stata opererer med een numerisk system missing value (.) - denne værdi er større end enhver valid værdi! I tillæg hertil har Stata 26 user missing values:.a,.b,.c....z Samlet gælder at: [valide værdier] <. <.a <.b <.c <....z Til stenge benyttes tom streng ( ) som missing value. Man kan selvfølgelig beslutte egne missing value strenge. F.eks. na (= not available) mvdecode Var(s), mv(miss_val) mvdecode Var(s), mv(miss_val1=. \ miss_val2=.a) mvdecode hoejde, mv(99) mvdecode hoejde, mv(99=. \ 88=.a) : Underforstået: 99=. (99 -> system missing (.)) : 99 -> system missing, 88 -> user-missing (.a) Omkodning af udvalgte værdier til Stata missings -det samme kan eventuelt gøres med alm. Recode (Recode hoejde (99=.)(88=.a)) egen Nyvar num =robs(var(s)) : Nyvar tildeles for hver observation/case, antal variable med valide-værdier blandt de listede egen nvalid=robs(hoejde vaegt alder koen) (i eks max 4) egen Nyvar num =rmiss(var(s)) : Nyvar tildeles for hver observation/case, antal variable med missing-værdier blandt de listede egen nmiss=rmiss(hoejde vaegt alder koen) (i eks max 4) impute Var afh Var(s) uafh, generate(nyvar) impute hoejde vaegt alder koen, generate(r_hoejde) Optælling af valide værdier (f.eks. i skalaer) Optælling af missing værdier (f.eks. i skalaer) Imputering Udfyldning af missing-værdier udfra regressions beregning med associerede variable. OBS: een af flere kontroversielle metode til at oparbejde data!! System missing (.) kan ikke tildeles en value label. Det kan derimod de øvrige missing values (.a,.b,.c....z) se eventuelt: Dokumentation (label define/label values) 10
DESKRIPTIV STATISTIK Hvad har du? Hvad vil du? Kontinuerte (normalfordelte) Kategoriske (rank score) eller Kontinuerte (ikke normalfordelte) Dikotome/Kategoriske Teste var for normalitet Visuel vurdering udfra plots, tommelfinger-regel eller Shapiro-Wilk qnorm var histogram var, normal swilk var (obs: ringe styrke) Beskrive var(s) N, Mean, SD, Min, Max tabstat vars, statistics (n mean sd min max) N, Median, interquartile range tabstat vars, statistics (n median iqr) Proportion (frequency) tab1 vars summarize vars tab1 vars * ved kategoriske data N, Mean, SEM, 95%CI N, Percentile (default 50), 95%CI ci vars centile vars Beskrive var(s) i subgrupper (strata) N, Mean, SD, Min, Max bysort strata-var: tabstat var, statistics (n mean sd min max) N, Median, interquartile range bysort strata-var: tabstat var, statistics (n median iqr) Proportion (frequency) bysort strata-var: tab1 vars bysort strata-var: summarize vars tab2 var strata-var N, Mean, SEM, 95%CI N, Percentile (default 50), 95%CI bysort strata-var: ci vars bysort strata-var: centile vars Tabeller flyttes bedst fra STATA (result) over i Excel ved at : Markere tabel området (og kun tabel området!) Højre klikke og vælge copy as table Skifte til Excel og taste Ctrl+V ved den ønskede placering 11
ANALYTISK STATISTIK Hvad vil du? Kontinuerte (normalfordelte) Hvad har du? Kategoriske (rank score) eller Kontinuerte (ikke normalfordelte) Dikotom Teste var i 2 grupper Unpaired t test ttest var 1, by (var gruppe ) Mann-Whitney test ranksum var 1, by (var gruppe ) Fisher s test tabulate var gruppe var 1, exact Teste var1 mod var2 Paired t test ttest var 1 == var 2 (ttest var 1 == var 2, unpaired) Wilcoxon test signrank var 1 =var 2 McNemar s test mcc var 1 var 2 Teste var i 3+ grupper (unmatched) One-way ANOVA oneway var 1 var gruppe (evt anova) Kruskal-Wallis test kwallis var 1, by (var gruppe ) Chi-square test tabulate var gruppe var 1, chi2 Teste var i 3+ grupper (matchede grupper) Repeated-measures ANOVA anova var1 var2 var3, repeated(var3) Friedmann test Cochrane Q Kvantificere association mellem 2 variable Pearsons correlation Spearman correlation spearman var 1 var 2 Contingency coefficientsn Prædiktere værdier udfra én anden variabel Simple linear regression/ Nonlinear regression regress var 1 var 2 predict pvar Nonparametric regression Simple logistic regression logistic var 1 var 2 predict pvar Prædiktere værdier udfra flere andre variabel Multiple linear regression / Multiple nonlinear regression Multiple logistic regression 12
GRAFER I/II Hvad har du? primær (x-akse) variable Hvad vil du? Dikotom Ex: ja/nej, mand/kvinde Kategorisk Ex: Vældig godt, godt, mindre godt, dårligt Kontinuert Ex: BMI, Højde, Vægt 1 Dimension histogram var 1, discrete histogram var 1, discrete histogram var 1 (gen dummy=1) graph bar (count) dummy, over(var 1 ) (gen dummy=1) graph bar (count) dummy, over(var 1 ) antal antal fordeling fordeling Dikotom histogram var 1, by(var 2 ) histogram var 1, by(var 2 ) histogram var 1, by(var 2 ) (gen dummy=1) graph bar (count) dummy, over(var 1 ) over(var 2 ) (gen dummy=1) graph bar (count) dummy, over(var 1 ) over(var 2 ) asyvars stack 2 Dimensioner Kategorisk procent (gen dummy=1) graph bar (count) dummy, over(var 1 ) over(var 2 ) asyvars stack percent procent (gen dummy=1) graph bar (count) dummy, over(var 1 ) over(var 2 ) asyvars stack percent Kontinuert mean graph dot (mean) var 2, over(var 1 ) vertical mean graph dot (mean) var 2, over(var 1 ) vertical Scatter var 1 var 2........................................... graph bar (mean) var 2, over(var 1 ) graph bar (mean) var 2, over(var 1 ) 13
GRAFER II/II ytitle("eksempel på ytitle",size(medium *) )) ylabel(1(0.5)4) title("eksempel på title",size(large *) )) subtitle("subtitle eksempel",size(medium *) )) eksempel på ytitle 1 1,5 2 2,5 3 3,5 4 eksempel på note eksempel på caption note( eksempel på note, size(medium *) )) caption( eksempel på caption ) eksempel på title subtitle eksempel 1 2 eksempel på legend title mean of ls02 Labelsizes ( *) ) kan antage 23 værdier, mest oplagt : Tiny Small Medium Large Huge Samlet graf eksempel: graph bar (mean) var, over(gruppe) /// title("eksempel på title",size(large)) /// subtitle("subtitle eksempel",size(medium)) /// ytitle("eksempel på ytitle",size(medium)) /// ylabel(1(0.5)4) /// note( eksempel på note, size(medium)) /// caption( eksempel på caption ) /// legend(on) /// legend(title(eksempel på legend title,size(medium))) legend(on) / legend(off) legend(title( eksempel på legend title,size(medium *) ))) set scheme scheme set scheme s2mono default s2color s2mono s2manual s2gmanual s1color s1mono s1rcolor s1manual sj economist s2color8 Vælg graf-scheme (skabelon) Stata har en række fordefinerede schemes. Navnlig i forbindelse med print kan der være god ide i at eksperimentere med at finde det scheme som tager sig bedst ud på den aktuelle printer. graph save [graph_name].gph, asis graph use [graph_name].gph Gem/hent en graf Grafer kan gemmes og hentes frem senere. asis (as is) gemmer grafen med scheme indstillinger, således at grafen altid vil ligne sig selv uanset program (scheme-) opsætning graph combine [graph_name1].gph [graph_name2].gph Kombinér Gemte grafer (2 eller flere) kan sættes sammen til een, som så samlet kan cut n pastes ind i tekstbehandling eller Power-Point præsentation. Fra version 10 kan man opnå yderligere kontrol med grafers udseende via Graph editor (højreklik på graf og vælg Start Graph Editor ) disse tilretninger forbliver dog udokumenterede og lader sig ikke umiddelbart reproducere via DO-files 14
GENEREL KOMMANDO-OPBYGNING [prefix:] kommando [varlist] [if] [in] [weight] [, option] Hvad skal der gøres? Hvad (hvilke variable) skal det gøres på? Hvem (hvilke observationer) skal det gøres på? Evt. ekstra bonus materiale Eks #1 tabulate alder if alder<64, missing Kommando Betingelse Option Tabulér (lav frekvenstabel over) aldersfordeling blandt alle der er yngre end 64 år vis også missing i tabellen Eks #2 generate alder_i_år=int(alder_i_dage/365.25) Kommando Funktion Generér (beregn) alder_i_år som heltalsdelen (obs. funktion: int() ) af alder_i_dage divideret med 365.25 Eks #3 bysort sex: mean alder_i_år, level(90) Præfix Kommando Option Fordelt på sex (køn); lav opgørelse over gennemsnit alder (med SEM og CI) benyt 90% ved beregning af confidensinterval OBS: Næsten alle kommandoer i STATA har en tilhørende dialogbox (db), med indbygget vejledning: db kommando - ved at bruge db undgås behov for at huske myriader af options 15
LOGISKE UDTRYK (BETINGELSER) Logiske udtryk er forespørgsler som returnerer: sand eller falsk. Hovedanvendelsen ligger i betingelser (if...) f.eks. i forbindelse med: - betingede regneudtryk - opdeling (stratificering) af analyser - opdeling (stratificering) af grafer. Logiske udtryk kan bestå af flere del-forespørgsler, som hæftes sammen af de logiske operatorer: AND (&) og/eller OR ( ) Var >... Var <... Var >=... Var <=... Var ==... Var!=... (eks: alder>14) (eks: alder<64) (eks: alder>=15) (eks: alder<=63) (eks: alder==50) (eks: alder!=50) : større end : mindre end : større end/lig med : mindre end/lig med : Lig med : forskellig fra (NOT lig med) Relationelle operatorer De mest overraskende er vel: == (lig med) og!= (NOT lig med)... som tit forveksles med hhv: = (kun korrekt i forbindelse med beregninger) og <> (som betyder forskellig fra i de fleste programmer) &! : og (evt: [Alt] + [0] [3] [8]) : eller (evt: [Alt] + [1] [2] [4]) : NOT (evt: [Alt] + [0] [3] [3]) Logiske operatorer Vær generelt opmærksom omkring brugen af parenteser, når (or) indgår (= brug parenteser aktivt!!). Eks #1 ifalder_i_år<=65 & indkomst>200000 beregn/omkod/tabuler/?? HVIS alder_i_år er 65 eller mindre OG indkomst er større end 200000 Eks #2 ifsocial_kode==3 social_kode==4 beregn/omkod/tabuler/?? HVIS social_kode er 3 ELLER 4 Tip: Ved længere lister af alternativer kan man istedet angive: if inlist(social_kode,3,4,5,8,9) Eks #3 list cpr hojde vaegt if bmi>30 list cpr, højde og vægt HVIS høj bmi (større end 30) - list cpr hojde vaegt if bmi>30 & bmi<. med: & bmi<. sikres at missing bmi ikke listes 16
STATA SOM REGNEMASKINE (IMMEDIATE COMMANDS) display regne-udtryk display 5+5 Beregning af regne-udtryk uafhængigt af data i data editoren. Regne-udtrykket kan være naturligvis være langt mere kompliceret end det viste. cii n y cii 106 27 csi a c b d csi 20 52 262 1723 -- Binomial Exact -- Variable Obs Mean Std. Err. [95% Conf. Interval] -----------------+---------------------------------------------------------- 106.254717.0423191.1750511.3485534 Exposed Unexposed Total -----------------+------------------------+------------ Cases 20 52 72 Noncases 262 1723 1985 -----------------+------------------------+------------ Total 282 1775 2057 Risk.070922.0292958.0350024 Point estimate [95% Conf. Interval] ------------------------+------------------------ Risk difference.0416262.0106562.0725962 Risk ratio 2.420895 1.468111 3.992022 Attr. frac. ex..5869296.3188525.7495004 Attr. frac. pop.163036 +------------------------------------------------- chi2(1) = 12.48 Pr>chi2 = 0.0004 Estimation af proportioner Estimation af Relativ risiko & Risiko (Cohort studies) Obs kommando: set level 90 vil frembringe 90% CI i div. output iri nevent1 nevent0 risktime1 risktime0 iri 139 30 99742 36181 Exposed Unexposed Total -----------------+------------------------+------------ Cases 139 30 169 Person-time 99742 36181 135923 -----------------+------------------------+------------ Incidence Rate.0013936.0008292.0012434 Point estimate [95% Conf. Interval] ------------------------+------------------------ Inc. rate diff..0005644.000188.0009409 Inc. rate ratio 1.680723 1.126285 2.584262 (exact) Attr. frac. ex..4050178.1121256.6130424 (exact) Attr. frac. pop.3331212 +------------------------------------------------- (midp) Pr(k>=139) = 0.0035 (exact) (midp) 2*Pr(k>=139) = 0.0071 (exact) Estimation af incidence rate ratio & rate differens cci a c b d cci 116 39 84 71 Proportion Exposed Unexposed Total Exposed -----------------+------------------------+------------------------ Cases 116 39 155 0.7484 Controls 84 71 155 0.5419 -----------------+------------------------+------------------------ Total 200 110 310 0.6452 Point estimate [95% Conf. Interval] ------------------------+------------------------ Odds ratio 2.514042 1.513041 4.194055 (exact) Attr. frac. ex..6022341.3390795.7615672 (exact) Attr. frac. pop.4507042 +------------------------------------------------- chi2(1) = 14.43 Pr>chi2 = 0.000 Estimation af odds ratio (Case-control studies) Der er mange flere kommandoer af samme slags, brug: findit immediate - for en oversigt 17
YDERLIGERE RESSOURCER Som nævnt tidligere, findes et kæmpe internet community omkring Stata kommandoen findit kan være meget nyttig til at finde frem til funktioner som ikke lige findes i grundpakken findit sf36 Søger (og finder) do-file som kan score SF-36 data findit confidence limit plot findit do2htm Søger (og finder) blandt andet: eclplot.do, som laver Cochrane plots dvs: meta-analyse oversigter over punktestimater med tilhørende confidens intervaller. Søger (og finder): grss.do, som står for graphic slide show en funktion som kanaliserer grafer over i et show som kan gennemses. I tilgift findes do2htm.do, som kanaliserer alt output (inklusiv grafik!) over i et htm-dokument, som er meget print venligt. søg og du skal finde! findit net search lookfor Søg i aktuelle datasæt (variable) Søg officielle Stata (funktioner) Søg google-like (funktioner) 18
EGNE NOTATER 19
20
21