02/05/2022
Introduktion til Makroer i Stata for Sundhedsforskere
Inden for sundhedsforskning er effektiv og reproducerbar dataanalyse afgørende. Store datasæt, komplekse statistiske modeller og behovet for at gentage analyser på tværs af forskellige variable eller subgrupper er en del af hverdagen. Her kommer Stata ind som et kraftfuldt værktøj, og en af dens mest potente funktioner er brugen af makroer. Makroer giver dig mulighed for at automatisere gentagne opgaver, gøre din kode mere læselig og reducere risikoen for fejl. Forestil dig, at du ikke længere manuelt skal kopiere og indsætte den samme kommandolinje igen og igen, men blot kan ændre en enkelt variabel. Det er den kraft, makroer giver dig.

I denne artikel vil vi dykke ned i de tre primære typer af makroer i Stata: lokale, globale og programmakroer. Vi vil bruge det indbyggede datasæt NHANES II (Second National Health and Nutrition Examination Survey) som vores gennemgående eksempel. Dette datasæt indeholder sundheds- og ernæringsoplysninger fra et udsnit af den amerikanske befolkning og er et perfekt eksempel på den type data, man arbejder med inden for folkesundhed og epidemiologi. For at følge med, kan du indlæse datasættet i Stata med kommandoen: webuse nhanese2, clear.
Lokale Makroer: Din Midlertidige Assistent
Lokale makroer er de mest almindeligt anvendte makroer i Stata. De er midlertidige og eksisterer kun inden for den do-fil, det program eller den kommandoblok, hvor de er defineret. Når programmet eller do-filen er færdig med at køre, slettes den lokale makro fra hukommelsen. Dette gør dem ideelle til midlertidig opbevaring af information, som du kun skal bruge i en kort periode.
Grundlæggende Brug af Lokale Makroer
En lokal makro defineres med kommandoen local. Navnet på makroen kan derefter bruges i efterfølgende kommandoer ved at omkranse det med en venstre apostrof (`) og en højre apostrof ('). Lad os se på nogle eksempler.
Opbevaring af et variabelnavn:
* Definer en lokal makro for et variabelnavn local hoejde "height" * Brug den lokale makro i en kommando summarize `hoejde'
I dette eksempel gemmer vi strengen "height" i en lokal makro ved navn `hoejde`. Når Stata ser ``hoejde'``, erstatter den det med indholdet, altså "height", og kommandoen summarize height udføres.
Opbevaring af beregnede resultater:
Mange Stata-kommandoer gemmer resultater i baggrunden, som kan tilgås. Disse kaldes r-class resultater. Vi kan gemme disse i lokale makroer for senere brug.

* Kør en summarize kommando på variablen alder summarize age * Gem gennemsnittet (r(mean)) i en lokal makro local gennemsnitsalder = r(mean) * Vis resultatet display "Den gennemsnitlige alder er `gennemsnitsalder'"
Dette er ekstremt nyttigt, når du skal bruge resultatet af en beregning i en efterfølgende kommando, f.eks. til at oprette en ny variabel eller i en graf-titel.
Automatiser med `foreach`-loopet og Lokale Makroer
Den virkelige styrke ved lokale makroer viser sig, når de kombineres med loops. Et loop er en programmeringsstruktur, der giver dig mulighed for at gentage et sæt kommandoer flere gange. Stata's `foreach`-loop er perfekt til at iterere over en liste af elementer, såsom variabelnavne.
Den grundlæggende syntaks for et `foreach`-loop er:
foreach elementnavn of | in | from liste { kommandoer der bruger `elementnavn' }
Lad os se, hvordan vi kan bruge dette til at opsummere flere variable fra vores NHANES II-datasæt uden at skulle skrive summarize-kommandoen for hver enkelt.
* Definer en lokal makro med en liste af variable local demografi "age weight height bpsystol bpdiast" * Start et foreach-loop, der itererer over listen i makroen 'demografi' foreach var of local demografi { display "--- Opsummering for var' ---" summarizevar' local gennemsnit_var' = r(mean) display "Gennemsnittet forvar' er gennemsnit_var''" display "" }
Hvad sker der her? Først definerer vi en lokal makro `demografi`, der indeholder en liste over fem variabelnavne. Derefter starter `foreach`-loopet. For hver runde i loopet tager Stata det næste element fra listen (først "age", så "weight" osv.) og gemmer det i den midlertidige loop-variabel `var`. Inde i loopet bruger vi ``var'`` til at referere til det aktuelle variabelnavn. Dette er en utroligt effektiv måde at udføre den samme handling på mange variable.
Looping gennem kategoriske værdier
En anden almindelig opgave i sundhedsforskning er at analysere data opdelt efter en kategorisk variabel, f.eks. region, køn eller sygdomsgruppe. `foreach`-loopet kan også bruges her i kombination med kommandoen `levelsof`.

* Find alle unikke værdier af variablen 'region' og gem dem i en lokal makro levelsof region, local(regioner) * Loop gennem hver region foreach r of local regioner { display "Analyse for Region r'" count if region ==r' display "Antal observationer: r(N)'" summarize age if region ==r' display "Gennemsnitsalder: `r(mean)'" display "" }
Dette stykke kode identificerer først alle de unikke regioner i datasættet. Derefter kører det et loop, der for hver enkelt region tæller antallet af observationer og beregner gennemsnitsalderen. Dette automatiserer processen med at skabe stratificerede analyser.
Globale Makroer: Når Data Skal Vare Ved
I modsætning til lokale makroer, som er midlertidige, er globale makroer vedvarende. Når du definerer en global makro, eksisterer den i hele din Stata-session, indtil du lukker Stata eller eksplicit sletter den. De er nyttige til værdier, du har brug for at tilgå på tværs af flere do-filer eller programmer, f.eks. stien til dit projektbibliotek eller navnet på dit primære datasæt.
En global makro defineres med kommandoen global og tilgås ved at bruge et dollartegn `$` foran navnet.
* Definer en global makro for en filsti global datasti "C:/MineProjekter/Sundhedsanalyse/Data" * Brug den globale makro til at indlæse en fil (bemærk $ syntaksen) use "$datasti/patientdata.dta", clear * Definer en global makro med analysevariable global analysevar "age weight height bpsystol bpdiast" * Brug den i en kommando summarize $analysevar
Vær forsigtig med brugen af globale makroer. Da de er vedvarende, kan du ved et uheld overskrive en vigtig global makro, hvilket kan føre til fejl, der er svære at finde. En god praksis er at bruge unikke og beskrivende navne.
Lokal vs. Global Makro: En Hurtig Sammenligning
For at gøre valget lettere, er her en simpel tabel, der sammenligner de to typer makroer.

| Egenskab | Lokal Makro | Global Makro |
|---|---|---|
| Levetid | Midlertidig (kun inden for den aktuelle kørsel) | Vedvarende (hele Stata-sessionen) |
| Definition | local navn "indhold" | global navn "indhold" |
| Reference | `navn' | $navn eller ${navn} |
| Anbefalet brug | Midlertidige variable, lister til loops, opbevaring af resultater inden for en enkelt do-fil. | Konstante værdier som filstier, projektnavne eller centrale variable, der bruges på tværs af flere do-filer. |
Ofte Stillede Spørgsmål (FAQ)
Hvordan tildeler jeg indhold til en global makro?
Der er to primære måder. Den første tildeler en streng direkte: global x "dette-og-hint". Her gemmes strengen "dette-og-hint" i makroen `x`. Den anden måde bruger et lighedstegn til at evaluere et udtryk: global y = 2 * 5. Her vil Stata først beregne 2 * 5, og makroen `y` vil indeholde værdien "10". Vær opmærksom på, at hvis du bruger et lighedstegn, evalueres udtrykket med det samme.
Hvorfor udvider Stata nogle gange ikke min makro?
Dette kan ske, hvis du forsøger at indlejre en makro i en anden. Hvis du bruger en backslash `\` foran den indre makros apostrof, forhindrer du Stata i at udvide den med det samme. For eksempel, i local formel "`A' + 5", vil Stata forsøge at erstatte `A` med det samme. Men i local formel "\`A' + 5", gemmes selve strengen "`A' + 5" i makroen `formel`, og `A` udvides først, når `formel` bliver kaldt.
Hvad er den største faldgrube, når man bruger makroer?
Den mest almindelige fejl er at forveksle syntaksen for lokale og globale makroer. At huske at bruge `` `navn' `` for lokale og `$` for globale er afgørende. En anden almindelig fejl er at glemme de krøllede parenteser `${navn}` omkring et globalt makronavn, når det efterfølges direkte af tekst, hvilket kan få Stata til at fejlfortolke navnet. For eksempel vil use "$datapatienter.dta" fejle, hvis Stata leder efter en makro ved navn `datapatienter`, mens use "${data}patienter.dta" vil fungere korrekt.
Konklusion
At mestre brugen af lokale og globale makroer, især i kombination med `foreach`-loops, kan dramatisk forbedre din effektivitet og nøjagtighed som dataanalytiker i sundhedssektoren. Det transformerer din kode fra en statisk liste af kommandoer til et dynamisk og fleksibelt script, der nemt kan tilpasses nye variable eller subgrupper. Ved at investere tid i at lære disse værktøjer, bygger du et solidt fundament for reproducerbar og skalerbar forskning, hvilket giver dig mere tid til det, der virkelig betyder noget: at fortolke resultaterne og skabe ny viden.
Hvis du vil læse andre artikler, der ligner Stata Makroer & Loops: Din Guide til Effektiv Data, kan du besøge kategorien Sundhed.
