Strengvariabler

Strengvariabler er ganske enkelt variabler som ikke bare inneholder tall, men også andre tegn (muligens blandet med tall). For Eksempel lagrer European Social Survey informasjon om landet der respondentene ble undersøkt i variabel cntry, som inneholder strenger som «DE», «ES,» LT » etc. Et annet begrep som ofte brukes er «alfanumeriske» variabler, åpenbart refererer til «alfabetet» og derfor til bokstaver. Men faktisk kan en strengvariabel inneholde tegn som » \ «eller» – «eller»:»og så videre — alt et tastatur kan produsere .

Den første delen vil fokusere på emnet for å transformere streng til numeriske variabler. Den andre delen vil presentere noen andre ting jeg fant nyttig. Men forst av alt vil jeg utstede en …

Advarsel

Fra versjon 14 støtter Stata Unicode (UTF-8). Hvis du ikke vet hva det betyr-det handler om hvordan tegn er kodet digitalt på datamaskinen. (Du har hørt at datamaskiner bruker biter, byte og slike ting for å representere informasjon. Hvis du skriver inn og lagrer en «a», vil du ikke finne en » a «på harddisken, men noen datakode som er forvandlet til en» a » på skjermen eller på skriveren.) Unicode er mye mer universell enn tidligere kodinger som ASCII eller ANSII. Det tillater tonnevis av tegn å bli representert, inkludert mange fra de mange språkene som ikke bruker tegnene du ser her (avledet fra, og i de fleste deler identisk med det latinske alfabetet), men heller kyrillisk, Thai eller hva som helst.

jeg vil ikke gå i detalj her, men vil bare varsle deg om at de nye mulighetene for Å håndtere Unicode-tegn ikke er dekket her. Merk spesielt at for noen strengfunksjoner (for eksempel substr()) er det nå tilsvarende funksjoner for å håndtere Spesielt Med Unicode-tegn. Disse funksjonene har navn som er kompositter av u pluss den konvensjonelle funksjonen, f.eks. usubstr(). Merk at så lenge du begrenser deg til tegn fra den opprinnelige ASCII-koden (noe jeg har undervist og forkynt i flere tiår), er det ikke nødvendig å bekymre deg. Men ellers, vær oppmerksom på at noen ting kan fungere annerledes Med Stata 14.

for eksempel er tysk umlaute representert annerledes I Stata 13 Og Stata 14, og dette har konsekvenser utover visning av tegn. For eksempel er det (tyske) ordet fü en streng med lengde tre I Stata 13, men strenglengden er fire I Stata 14. Dette påvirker også resultatene av funksjoner som strlen(). Som strlen()refererer til minnet som brukes (og ikke antall tegn som de vises på skjermen), vil resultatet av strlen(für) også være 4 I Stata 14 i motsetning til 3 I Stata 13. Den nye funksjonen ustrlen(für), derimot, vil gi 3. Med andre ord refererer «ustring» – funksjoner til antall tegn som de ser ut til det menneskelige øye, ikke mengden minne som trengs.

fra streng til numeriske variabler

Selv Om Stata kan håndtere strengvariabler, er det klart på mange måter at numeriske variabler er mye foretrukket. Ikke minst godtar de fleste statistiske prosedyrer bare ikke strengvariabler. Heldigvis Tilbyr Stata noen enkle måter å konvertere streng til numeriske variabler (og omvendt).

«Kun Streng» – variabler

noen ganger representerer strengvariabler propiertier. Dette kan være «mann» og «kvinne» (pluss «homofil»,» queer», eller hva du vil, selv om dette fortsatt er svært sjeldent i samfunnsvitenskapelige data). Eller det kan være landskoder nevnt i innledningen, det vil si «DE», «ES»,» UK», US » etc. Hvis du trenger å forvandle dette til en numerisk variabel, skal hver kategori representeres av et annet nummer. Det er enkelt å bytte fra streng til numerisk, med encode som kommandoen etter eget valg:

kode cntry, gen(cntryum)

konverterer cntry til en numerisk variabel, med tegnene fra den tidligere strengvariabelen som verdietiketter.

hvis du av en eller annen grunn vil konvertere en numerisk variabel til en strengvariabel, kan du bruke komplementærfunksjonen decode. Ikke overraskende Krever Stata at den numeriske variabelen skal merkes; disse etikettene vil bli brukt som strenger for å representere de forskjellige verdiene.

Tall «forkledd» som strenger

et spesielt tilfelle er variabler der numeriske verdier lagres som en strengvariabel, inkludert tilfeller når de numeriske verdiene lagres sammen med noen (irrelevante) tegn. Prosedyre destring tilbyr måter å konvertere en slik variabel til en numerisk variabel, slik at de opprinnelige verdiene forblir uendret (hvis de bare består av tall) eller fjerner eventuelle ikke-numeriske tegn.

den generelle formen for kommandoen er

destring varname (s), valg

med minst ett alternativ som kreves. De viktigste alternativene er:

  • generate(newvarnames): skaper nye variabler
  • replace: erstatter den gamle variabelen (s)
  • ignore("char1" ): fjerner tegn «char1″,» char2 » etc.
  • force: endrer alle variabler som inneholder tegn som ikke er nevnt i force til manglende

Ikke overraskende Tilbyr Stata også kommando tostring som fungerer omvendt.

datatransformasjoner for strengvariabler

det som følger er en ganske heterogen samling. Spesielt er det dusinvis av funksjoner som refererer til strengvariabler, og jeg vil dekke bare et veldig lite og vilkårlig utvalg.

split

split er en kommando som fungerer på en strengvariabel. Veldig åpenbart vil det dele det i to eller flere deler; det vil gjøre det å skape nye variabler mens du forlater den gamle variabelen uendret. Det gjør det hvis det er noe i den opprinnelige variabelen som skiller disse delene. Som standard er denne separatoren et mellomrom. Dermed vil splitting av en variabel som inneholder » Joe Brady «resultere i to nye variabler, en som inneholder» Joe «og den andre som inneholder»Brady». Merk at hvis det er en person som heter «Joe F. Brady», blir resultatet tre variabler.

split name Variabel «navn» vil bli delt inn i variabler «navn1″,» navn2 » etc., forutsatt at den inneholder blanks, selvfølgelig. Antallet nye variabler vil være lik antall emner pluss 1.

split name, parse(,) Variabel «navn» vil bli delt med komma i stedet for mellomrom som separatorer. Du kan angi flere separatorer; separatorer kan også bestå av mer enn ett tegn.

split lnum, destring Deler av «lnum» som faktisk representerer tall vil bli omgjort til numeriske variabler — men bare hvis det er tall gjennom for en gitt ny variabel. For eksempel, hvis variabel «lnum» er «60 30» for ett tilfelle og «50 ab» for en annen, vil ny variabel «lnum1» være numerisk (med verdier 60 og 50) mens «lnum2» fortsatt vil være en strengvariabel (og mens verdien av denne variabelen vil være 30 for det første tilfellet, vil dette fortsatt bli behandlet som en streng)

split lnum, destring forcealle de nye variablene vil være numeriske. Likevel, når et ikke-numerisk stykke informasjon vises, vil verdien mangle. For eksempel, hvis» lnum «er» 60 b30″, vil verdien av» lnum2 » mangle.

split lnum, destring force ignore(abcd) Alle de nye variablene vil være numeriske. Alle tegn «a»,» b»,» c «eller» d » vil bli droppet. I det forrige eksemplet vil» b30 «bli omgjort til» 30 » og resultatet blir faktisk en numerisk variabel.

split lnum, generate(ln) Variabel «lnum» vil bli delt inn i variabler «ln1″, » ln2 » og så videre.

egen med ends ()

denne funksjonen vil trekke ut en » del «fra en strengvariabel(i motsetning til split-kommandoen, som vil skape så mange nye variabler som det er «deler»). Hva en del er er definert av en separator. Ironisk nok vil standard ends() trekke ut den første delen (eller hodet, som det heter I Stata-håndboken). Alt i alt er det tre muligheter:

egen firstname = ends(name)Dette vil trekke ut alt som vises i» navn » før den første forekomsten av separatoren, som er standard, er ett tomt mellomrom. Dette tilsvarer egen firstname = ends(name), head. Hvis det ikke er noen separator, vises hele strengen i «navn» på nytt i «fornavn»

egen lastname = ends(name), lastDette vil trekke ut alt som vises i» navn » etter den siste forekomsten av separatoren. Igjen, hvis det ikke er noen separator, vil hele innholdet av «navn» bli representert i «etternavn».

egen endofname = ends(name), tail dette vil trekke ut alt som vises i «navn» etter den første forekomsten av separatoren. Hvis det ikke er noen separator, blir resultatet en tom streng.

separatoren kan angis med punct(,). Dermed vil egen firstname = ends(name) punct(,)trekke ut alt som vises i» navn » før den første forekomsten av et komma. Andre separatorer er mulige, inkludert de som består av flere tegn, men du kan ikke angi flere separatorer.

strmatch ()

dette kan brukes sammen med generate/replace. Det ser etter et «ord», eller mer nøyaktig, en sekvens av tegn, som i:

gen newvar = strmatch(oldvar, «somecharacters»)

Variabelen «newvar» vil ha en verdi på 1 hvis «oldvar» består av sekvensen «somecharacters». Men hvis du bare leter etter «somecharacters» skal vises et sted i» oldvar», kan du bruke

gen newvar = strmatch(oldvar,»*somecharacters*»)

som vil se etter» somecharacters » skal vises hvor som helst. Skrive

gen newvar = strmatch(oldvar, «*somecharacters»)

Vil Gjøre Stata se etter «somecharacters» skal vises på slutten av «oldvar», uansett hvor mange tegn foran»somecharacters». Selvfølgelig kan "somecharacters*" også brukes.