String Variables
String variables zijn variabelen die niet alleen getallen bevatten, maar ook andere tekens (mogelijk gemengd met getallen). De Europese sociale enquête slaat bijvoorbeeld informatie op over het land waar de respondenten werden ondervraagd in variabele cntry
, die strings bevat zoals “DE”, “ES, “LT” enz. Een andere term die vaak wordt gebruikt is “alfanumerieke” variabelen, uiteraard verwijzen naar het” alfabet ” en dus naar letters. Maar eigenlijk kan een String variabele tekens bevatten zoals ” \ ” of ” – “of”:”enzovoort-alles wat een toetsenbord kan produceren.
het eerste deel zal zich richten op het onderwerp van het omzetten van string in numerieke variabelen. De tweede sectie zal een aantal andere dingen die ik nuttig vond presenteren. Maar eerst en vooral zal ik een …
waarschuwing
vanaf versie 14 ondersteunt Stata Unicode (UTF-8). Als je niet weet wat dat betekent — het gaat over hoe tekens digitaal worden gecodeerd op uw computer. (Je hebt gehoord dat computers bits, bytes en dergelijke gebruiken om informatie te vertegenwoordigen. Als u een “a” typt en opslaat, vindt u geen “a” op uw harde schijf, maar een computercode die wordt omgezet in een “a” op uw scherm of op de printer. Unicode is veel universeler dan eerdere coderingen zoals ASCII of ANSII. Het maakt het mogelijk tonnen tekens te worden weergegeven, waaronder veel uit de vele talen die niet de tekens die u hier ziet gebruiken (afgeleid van, en in de meeste delen identiek aan die van, het Latijnse alfabet), maar eerder Cyrillisch, Thais, of wat dan ook.
Ik zal hier niet in detail treden, maar Ik wil u erop wijzen dat de nieuwe mogelijkheden om met Unicode-tekens om te gaan hier niet worden behandeld. Merk in het bijzonder op dat Voor sommige tekenreeksfuncties (zoals substr()
) er nu gelijkwaardige functies zijn voor het omgaan met in het bijzonder Unicode-tekens. Deze functies hebben Namen die composieten zijn van u
plus de conventionele functie, bijvoorbeeld usubstr()
. Merk op dat zolang je jezelf te beperken tot tekens uit de oorspronkelijke ASCII-code (iets wat ik heb geleerd en prediken voor decennia), is er geen zorgen te maken. Maar anders, wees je ervan bewust dat sommige dingen anders kunnen werken met Stata 14.
bijvoorbeeld, Duitse umlaute wordt anders weergegeven in Stata 13 en Stata 14, en dit heeft gevolgen buiten de weergave van tekens. Als voorbeeld: het (Duitse) woord für is een string met een lengte van drie in Stata 13, maar de stringlengte is vier in Stata 14. Dit beïnvloedt ook de resultaten van functies zoals strlen()
. Aangezien strlen()
verwijst naar het gebruikte geheugen (en niet het aantal tekens zoals ze op het scherm verschijnen), zal het resultaat van strlen(für)
ook 4 zijn in Stata 14, in tegenstelling tot 3 in Stata 13. De nieuwe functie ustrlen(für)
levert daarentegen 3 op. Met andere woorden, “ustring” functies verwijzen naar het aantal karakters zoals ze verschijnen voor het menselijk oog, niet de hoeveelheid geheugen die nodig is.
van tekenreeks naar numerieke variabelen
hoewel Stata stringvariabelen kan verwerken, is het in veel opzichten duidelijk dat numerieke variabelen veel voorkeur hebben. Niet in het minst, de meeste statistische procedures gewoon niet accepteren string variabelen. Gelukkig biedt Stata een aantal eenvoudige manieren voor het converteren van tekenreeks naar numerieke variabelen (en vice versa).
” alleen Tekenreeksvariabelen ”
soms vertegenwoordigen tekenreeksvariabelen eigenschappen. Dit kan ” man ” en ” vrouw “zijn (plus” gay”,” queer”, of wat je maar wilt, zelfs als dit nog steeds zeer zeldzaam is in sociaalwetenschappelijke gegevens). Of het kunnen de landencodes zijn die in de introductie worden genoemd, dat wil zeggen, “de”, “ES”, “UK”, US” enz. Als u dit moet omzetten in een numerieke variabele moet elke categorie worden weergegeven door een ander nummer. Veranderen van tekenreeks naar numeriek is eenvoudig, met encode
is het commando van uw keuze:
coderen cntry, gen (cntrynum)
zal cntry
converteren naar een numerieke variabele, met de karakters van de vorige string-variabele als waarde-labels.
Als u om een of andere reden een numerieke variabele naar een string variabele wilt converteren, kunt u de aanvullende functie decode
gebruiken. Het is niet verrassend dat Stata vereist dat de numerieke variabele wordt gelabeld; deze labels zullen worden gebruikt als tekenreeksen om de verschillende waarden weer te geven.
getallen “vermomd” als tekenreeksen
een speciaal geval zijn variabelen waarbij numerieke waarden als een tekenreeksvariabele worden opgeslagen, inclusief gevallen waarin de numerieke waarden samen met enkele (irrelevante) tekens worden opgeslagen. Procedure destring
biedt manieren om een dergelijke variabele om te zetten in een numerieke variabele, waarbij de oorspronkelijke waarden ongewijzigd blijven (als ze alleen uit getallen bestaan) of niet-numerieke tekens worden verwijderd.
de algemene vorm van het commando is
destring varname(s), options
waarbij ten minste één optie vereist is. De belangrijkste opties zijn::
-
generate(newvarnames)
: maakt nieuwe variabelen aan -
replace
: vervangt de oude variabele (s) -
ignore("char1" )
: verwijdert tekens “char1″,” char2 ” enz. -
force
: verandert alle variabelen die niet inforce
genoemde tekens bevatten in ontbrekende
niet verrassend, biedt Stata ook opdracht tostring
aan die andersom werkt.
gegevenstransformaties voor stringvariabelen
wat volgt is een vrij heterogene verzameling. In het bijzonder zijn er tientallen functies die verwijzen naar string variabelen, en Ik zal slechts een zeer kleine en willekeurige selectie behandelen.
split
split
is een commando dat werkt op een String variabele. Het is duidelijk dat het zal splitsen in twee of meer delen; het zal dit doen het creëren van nieuwe variabelen terwijl het verlaten van de oude variabele onveranderd. Het doet dit als er iets in de oorspronkelijke variabele die deze delen scheidt. Standaard is dit scheidingsteken een spatie. Dus, het splitsen van een variabele met “Joe Brady” zal resulteren in twee nieuwe variabelen, een met “Joe” en de andere met “Brady”. Merk op dat als er een persoon met de naam “Joe F. Brady” het resultaat zal zijn drie variabelen.
split name
variabele ” name “wordt opgesplitst in variabelen” name1″,” name2 ” enz. op voorwaarde dat het losse flodders bevat, natuurlijk. Het aantal nieuwe variabelen zal gelijk zijn aan het aantal blanco ‘ s plus 1.
split name, parse(,)
variabele “name” zal worden gesplitst met komma ‘ s in plaats van spaties als scheidingstekens. U kunt meerdere scheidingstekens aangeven; ook kunnen scheidingstekens uit meer dan één teken bestaan.
split lnum, destring
Delen van “lnum” die werkelijk getallen vertegenwoordigen, worden omgezet in numerieke variabelen — maar alleen als er voor een bepaalde nieuwe variabele getallen zijn. Bijvoorbeeld, als variabele ” lnum “voor een geval” 60 30 “is en” 50 ab “voor een ander geval, zal de nieuwe variabele “lnum1” numeriek zijn (met waarden 60 en 50) terwijl “lnum2” nog steeds een String variabele is (en terwijl de waarde van deze variabele 30 is voor het eerste geval, zal dit nog steeds als een string worden behandeld)
split lnum, destring force
alle nieuwe variabelen zullen numeriek zijn. Maar wanneer er een niet-numeriek stukje informatie verschijnt, ontbreekt de waarde. Als ” lnum “bijvoorbeeld” 60 b30 “is, zal de waarde van” lnum2 ” ontbreken.
split lnum, destring force ignore(abcd)
alle nieuwe variabelen zullen numeriek zijn. Alle tekens “a”, “b”, “c” of ” d ” worden weggelaten. In het vorige voorbeeld wordt ” b30 “dus omgezet in” 30 ” en het resultaat zal inderdaad een numerieke variabele zijn.
split lnum, generate(ln)
variabele ” lnum “wordt opgesplitst in variabelen” ln1″,” ln2 ” enzovoort.
egen met ends ()
deze functie zal één “part” uit een String variabele extraheren (in tegenstelling tot het split commando, dat evenveel nieuwe variabelen zal aanmaken als er “parts”zijn). Wat een deel is wordt gedefinieerd door een scheidingsteken. Ironisch genoeg zal ends()
standaard het eerste deel (of head, zoals het in het Stata-handboek wordt genoemd) extraheren. Al met al zijn er drie mogelijkheden:
egen firstname = ends(name)
dit zal alles extraheren dat verschijnt in” naam ” vóór de eerste verschijning van het scheidingsteken, wat standaard een lege spatie is. Dit is gelijk aan egen firstname = ends(name), head
. Als er geen scheidingsteken is, zal de hele tekenreeks in “name” opnieuw verschijnen in “firstname”
egen lastname = ends(name), last
dit zal alles extraheren dat verschijnt in” naam ” na de laatste verschijning van het scheidingsteken. Nogmaals, als er geen scheidingsteken is, wordt de volledige inhoud van “name” weergegeven in “lastname”.
egen endofname = ends(name), tail
dit extraheert alles wat in “name” verschijnt na het eerste voorkomen van het scheidingsteken. Als er geen scheidingsteken is, zal het resultaat een lege tekenreeks zijn.
het scheidingsteken kan worden aangegeven met punct(,)
. egen firstname = ends(name) punct(,)
zal dus alles extraheren wat in “name” voorkomt voordat een komma voor het eerst voorkomt. Andere scheidingstekens zijn mogelijk, inclusief die bestaande uit meerdere tekens, maar u kunt niet meerdere scheidingstekens aangeven.
strmatch ()
dit kan samen met generate/replace
worden gebruikt. Het zoekt naar een “woord”, of meer precies, een reeks tekens, zoals in:
gen newvar = strmatch(oldvar,”somecharacters”)
variabele” newvar “heeft een waarde van 1 als” oldvar “bestaat uit de reeks”somecharacters”. Als u echter alleen zoekt naar” somecharacters “om ergens in” oldvar “te verschijnen, kunt u
gen newvar = strmatch(oldvar,”*somecharacters*”)
gebruiken die zoekt naar” somecharacters ” om overal te verschijnen. Schrijven
gen newvar = strmatch (oldvar, “*somecharacters”)
zorgt ervoor dat Stata op zoek gaat naar “somecharacters” aan het einde van “oldvar”, ongeacht het aantal tekens dat voorafgaat aan “somecharacters”. Natuurlijk mag "somecharacters*"
ook worden gebruikt.