Merkkijonomuuttujat

Merkkijonomuuttujat ovat muuttujia, jotka sisältävät numeroiden lisäksi myös muita merkkejä (mahdollisesti numeroihin sekoitettuna). Esimerkiksi European Social Survey tallentaa tiedot maasta, jossa vastaajat on tutkittu, muuttujaan cntry, joka sisältää merkkijonoja kuten ”DE”,” ES”, ” LT ” jne. Toinen usein käytetty termi ovat” aakkosnumeeriset ”muuttujat, joilla viitataan ilmeisesti” aakkosiin ” ja siten kirjaimiin. Mutta todellisuudessa merkkijonomuuttuja voi sisältää merkkejä, kuten ” \ ” tai ” – ”tai”:”ja niin edelleen – mitä tahansa näppäimistö voi tuottaa.

ensimmäisessä osassa käsitellään merkkijonon muuttamista numeerisiksi muuttujiksi. Toinen osio esittelee joitakin muita asioita löysin hyödyllistä. Mutta ensin annan A: n …

Varoitus

versiosta 14 lähtien Stata tukee Unicodea (UTF-8). Jos et tiedä, mitä se tarkoittaa — kyse on siitä, miten merkit koodataan digitaalisesti tietokoneeseen. (Olet kuullut, että tietokoneet käyttävät bittejä, tavuja ja sellaisia asioita edustamaan tietoa. Jos kirjoitat ja tallennat” a”: n, et löydä” a”: ta kiintolevyltä, vaan jonkin tietokoneen koodin, joka muutetaan” A”: ksi näytölläsi tai tulostimella.) Unicode on paljon yleisempi kuin aiemmat koodaukset kuten ASCII tai ANSIII. Sen avulla tonnia merkkejä voidaan edustaa, mukaan lukien monet niistä lukuisista kielistä, jotka eivät käytä merkkejä näet täällä (peräisin, ja useimmissa osissa sama kuin, Latinalaisen aakkoset), vaan kyrillinen, Thai, tai mitä tahansa.

en mene tässä yksityiskohtiin, mutta haluan vain varoittaa, että tässä ei käsitellä uusia mahdollisuuksia käsitellä Unicode-merkkejä. Huomaa erityisesti, että joillekin merkkijonofunktioille (kuten substr()) on nyt olemassa vastaavia funktioita, joilla voidaan käsitellä erityisesti Unicode-merkkejä. Näiden funktioiden nimet ovat kompositioita u plus konventionaalinen funktio, esim. usubstr(). Huomaa, että niin kauan kuin rajoitat itsesi alkuperäisen ASCII-koodin merkkeihin (mitä olen opettanut ja saarnannut vuosikymmeniä), ei ole syytä huoleen. Mutta muuten, ole tietoinen siitä, että jotkut asiat saattavat toimia eri tavalla Stata 14.

esimerkiksi Saksan umlaute esitetään eri tavalla Stata 13: ssa ja Stata 14: ssä, ja tällä on muitakin seurauksia kuin merkkien näyttäminen. Esimerkiksi (Saksan) sana für on stata 13: ssa merkkijono, jonka pituus on kolme, mutta stata 14: ssä merkkijonon pituus on neljä. Tämä vaikuttaa myös funktioiden, kuten strlen(), tuloksiin. Koska strlen()viittaa käytettävään muistiin (eikä merkkien määrään sellaisena kuin ne näkyvät ruudulla), strlen(für): n tulos on myös 4 Stata 14: ssä verrattuna 3: een Stata 13: ssa. Uusi funktio ustrlen(für) sen sijaan tuottaa 3. Toisin sanoen” ustring ” – funktioilla tarkoitetaan sitä, kuinka monta merkkiä ne ihmissilmälle näyttävät, ei sitä, kuinka paljon muistia tarvitaan.

merkkijonosta numeerisiin muuttujiin

vaikka Stata osaa käsitellä merkkijonomuuttujia, on monilta osin selvää, että numeeriset muuttujat ovat paljon suositeltavia. Useimmat tilastolliset menetelmät eivät vain hyväksy merkkijonomuuttujia. Onneksi Stata tarjoaa joitakin helppoja tapoja muuntaa merkkijono numeerisiksi muuttujiksi (ja päinvastoin).

” String only ” – muuttujat

joskus merkkijonomuuttujat edustavat propientteja. Tämä voi olla ”Mies” ja ”nainen” (plus ”homo”, ”queer”, tai mitä haluat, vaikka tämä on vielä hyvin harvinaista yhteiskuntatieteellisessä aineistossa). Tai se voisi olla esittelyssä mainitut maatunnukset, eli ”DE”, ”ES”,” UK”, US ” jne. Jos haluat muuttaa tämän numeeriseksi muuttujaksi, jokainen luokka tulee esittää eri numerolla. Merkkijonosta numeeriseen vaihtaminen on helppoa, sillä encode on valitsemasi komento:

koodaa cntry, gen(cntrynum)

muuntaa cntry numeeriseksi muuttujaksi, jonka arvomuuttujina ovat entisen merkkijonomuuttujan merkit.

jos haluat jostain syystä muuntaa numeerisen muuttujan merkkijonomuuttujaksi, voit käyttää täydentävää funktiota decode. Ei ole yllättävää, että stata vaatii numeerisen muuttujan merkitsemistä; näitä merkkejä käytetään merkkijonoina edustamaan eri arvoja.

numerot” naamioidaan ” merkkijonoiksi

erikoistapaus ovat muuttujat, joissa numeeriset arvot tallennetaan merkkijonomuuttujana, mukaan lukien tapaukset, joissa numeeriset arvot tallennetaan yhdessä joidenkin (epäolennaisten) merkkien kanssa. Menettely destring tarjoaa tapoja muuntaa tällainen muuttuja numeeriseksi muuttujaksi jättäen alkuperäiset arvot muuttumattomiksi (jos ne koostuvat vain numeroista) tai poistamalla mahdolliset ei-numeeriset merkit.

komennon yleinen muoto on

destring varname (s), options

with at least one option being required. Tärkeimmät vaihtoehdot ovat:

  • generate(newvarnames): luo uusia muuttujia
  • replace: korvaa vanhan muuttujan (s)
  • ignore("char1" ): poistaa merkit ”char1”, ”char2” jne.
  • force: muuttaa kaikki muuttujat, jotka sisältävät merkkejä, joita ei ole mainittu force, puuttuviksi

ei ole yllättävää, Stata tarjoaa myös komennon tostring, joka toimii toisinpäin.

datamuunnokset merkkijonomuuttujille

seuraava on melko heterogeeninen kokoelma. Erityisesti merkkijonomuuttujiin viittaavia funktioita on kymmeniä, ja I kattaa vain hyvin pienen ja mielivaltaisen valinnan.

split

split on komento, joka toimii merkkijonomuuttujalla. On selvää, että se jakaa sen kahteen tai useampaan osaan; se tekee niin luoden uusia muuttujia jättäen vanhan muuttujan ennalleen. Se tekee niin, jos on jotain alkuperäisessä muuttuja, joka erottaa nämä osat. Oletusarvoisesti tämä erotin on tila. Näin ”Joe Bradyn” sisältävän muuttujan halkaiseminen johtaa kahteen uuteen muuttujaan, joista toinen sisältää ”Joe”: n ja toinen ”Bradyn”. Huomaa, että jos on olemassa henkilö nimeltä ”Joe F. Brady” tulos on kolme muuttujaa.

split name muuttuja ”nimi”jaetaan muuttujiin ”name1”, ”name2” jne. jos siinä on paukkupatruunoita. Uusien muuttujien määrä on yhtä suuri kuin aihioiden lukumäärä plus 1.

split name, parse(,) muuttuja ”nimi” jaetaan pilkuilla aihioiden sijaan erottimina. Voit ilmoittaa useita erottimia; myös erottimet voivat koostua useammasta kuin yhdestä merkistä.

split lnum, destringsellaiset ”lnum” osat, jotka todellisuudessa edustavat lukuja, muutetaan numeerisiksi muuttujiksi — mutta vain, jos tietyn uuden muuttujan osalta on olemassa koko numero. Esimerkiksi jos muuttuja ”lnum” on yhdellä tapauksella ”60 30” ja toisella ”50 ab”, uusi muuttuja ”lnum1” on numeerinen (arvoilla 60 ja 50), kun taas ”lnum2” on edelleen merkkijonomuuttuja (ja vaikka tämän muuttujan arvo on ensimmäisellä tapauksella 30, tätä käsitellään silti merkkijonon tavoin)

split lnum, destring forcekaikki uudet muuttujat ovat numeerisia. Kuitenkin aina, kun ei-numeerinen tieto ilmestyy, arvo puuttuu. Esimerkiksi jos ”lnum ”on” 60 b30″,” lnum2″: n arvo puuttuu.

split lnum, destring force ignore(abcd) kaikki uudet muuttujat ovat numeerisia. Kaikki merkit ”a”, ”b”, ”c” tai ” d ” pudotetaan. Näin ollen edellisessä esimerkissä” b30 ”muutetaan muotoon” 30 ” ja tuloksena On todellakin numeerinen muuttuja.

split lnum, generate(ln)muuttuja ” lnum ”jaetaan muuttujiin” ln1″,” ln2 ” ja niin edelleen.

egen päätteineen ()

tämä funktio purkaa merkkijonomuuttujasta yhden ” osan ”(erotuksena jakokäskystä, joka luo yhtä monta uutta muuttujaa kuin on”osia”). Se, mikä osa on, määritellään erottimella. Ironista kyllä, oletuksena ends() ottaa ensimmäisen osan (tai pään, kuten se on nimetty Statan käsikirjassa). Kaiken kaikkiaan on kolme mahdollisuutta:

egen firstname = ends(name)tämä ote mitään, joka näkyy” nimi ” ennen ensimmäistä occurence erotin, joka on oletuksena on yksi tyhjä tila. Tämä vastaa egen firstname = ends(name), head. Jos erotinta ei ole, koko merkkijono ” name ”ilmestyy uudelleen ”etunimi”

egen lastname = ends(name), lastTämä poistaa kaiken, mikä näkyy” nimessä ” erottimen viimeisen occurencen jälkeen. Jälleen, jos ei ole erotinta, koko sisältö ” nimi ”esitetään”sukunimi”.

egen endofname = ends(name), tailnäin saadaan erotettua kaikki, mikä esiintyy” nimessä ” erottimen ensimmäisen okkurenssin jälkeen. Jos erotinta ei ole, tuloksena on tyhjä merkkijono.

erotinta voi merkitä punct(,). Näin egen firstname = ends(name) punct(,)poimii kaiken, mikä esiintyy ”nimessä” ennen pilkun ensimmäistä okkurenssia. Muut erottimet ovat mahdollisia, myös ne, jotka koostuvat useista merkeistä, mutta et voi ilmoittaa useita erottimia.

strmatch ()

tätä voidaan käyttää yhdessä generate/replacekanssa. Se etsii” sanaa ”tai täsmällisemmin merkkisarjaa, kuten:

gen newvar = strmatch(oldvar,”somecharacters”)

muuttujan” newvar ”arvo on 1, jos” oldvar ”koostuu jaksosta”somecharacters”. Jos kuitenkin etsit vain ”somekaraktereita” esiintymään jossain ”oldvarissa”, voit käyttää

gen newvar = strmatch(oldvar, ”*somekarakterit*”)

, joka etsii ”somekaraktereita” esiintymään missä tahansa. Kirjoittaminen

gen newvar = strmatch (oldvar, ”*somekarakterit”)

saa Statan etsimään ”somekaraktereita” esiintymään ”oldvarin” lopussa, vaikka ”somekaraktereita”edeltäisi kuinka monta merkkiä tahansa. Toki myös "somecharacters*" voidaan käyttää.