variabilele String

variabilele String, pur și simplu vorbind, sunt variabile care conțin nu doar numere, ci și alte caractere (eventual amestecate cu numere). De exemplu, sondajul Social European stochează informații despre țara în care respondenții au fost chestionați în variabila cntry, care conține șiruri precum „DE”, „ES, „LT” etc. Un alt termen care este adesea folosit este variabilele „alfanumerice”, referindu-se evident la” alfabetul ” și, prin urmare, la Litere. Dar, de fapt, o variabilă șir poate conține caractere, cum ar fi ” \ ” sau ” – „sau”:”și așa mai departe-orice poate produce o tastatură.

prima secțiune se va concentra pe subiectul transformării șirului în variabile numerice. A doua secțiune va prezenta alte lucruri pe care le-am găsit utile. Dar, în primul rând, voi emite un …

avertisment

începând cu versiunea 14, Stata acceptă Unicode (UTF-8). Dacă nu știți ce înseamnă asta — este vorba despre modul în care caracterele sunt codificate digital pe computer. (Ați auzit că computerele folosesc biți, octeți și astfel de lucruri pentru a reprezenta informații. Dacă tastați și salvați un „a”, nu veți găsi un „A” pe hard disk, ci un cod de computer care este transformat într-un ” A ” pe ecran sau pe imprimantă.) Unicode este mult mai universal decât codificările anterioare, cum ar fi ASCII sau ANSII. Acesta permite de tone de caractere pentru a fi reprezentate, inclusiv multe din numeroasele limbi care nu folosesc caracterele pe care le vedeți aici (derivate din, și în cele mai multe părți identice cu cele ale, alfabetul Latin), ci mai degrabă chirilic, Thai, sau orice altceva.

Nu voi intra în detalii aici, ci vreau doar să vă avertizez că noile posibilități de a face față caracterelor Unicode nu sunt acoperite aici. Rețineți în special că pentru unele funcții de șir (cum ar fi substr()) există acum funcții echivalente pentru tratarea în special a caracterelor Unicode. Aceste funcții au nume care sunt compozite de uplus funcția convențională, de exemplu, usubstr(). Rețineți că, atâta timp cât vă limitați la caractere din codul ASCII original (ceva ce predau și predic de zeci de ani), nu este nevoie să vă faceți griji. Dar, în caz contrar, rețineți că unele lucruri ar putea funcționa diferit cu Stata 14.

de exemplu, Umlaute germane sunt reprezentate diferit în Stata 13 și Stata 14, iar acest lucru are consecințe dincolo de afișarea caracterelor. De exemplu, cuvântul (German) F ecctr este un șir de lungime Trei în Stata 13, dar lungimea șirului este de patru în Stata 14. Acest lucru influențează, de asemenea, rezultatele unor funcții precum strlen(). Deoarece strlen() se referă la memoria utilizată (și nu la numărul de caractere așa cum apar pe ecran), rezultatul strlen(für) va fi, de asemenea, 4 în Stata 14, spre deosebire de 3 în Stata 13. Noua funcție ustrlen(für), în schimb, va produce 3. Cu alte cuvinte, funcțiile „ustring” se referă la numărul de caractere așa cum apar la ochiul uman, nu la cantitatea de memorie necesară.

de la string la variabile numerice

chiar dacă Stata poate gestiona variabile string, este clar în multe privințe că variabilele numerice sunt mult mai preferate. Nu în ultimul rând, cele mai multe proceduri statistice pur și simplu nu acceptă variabile șir. Din fericire, Stata oferă câteva modalități ușoare de conversie a șirului în variabile numerice (și invers).

„numai șir” variabile

uneori, variabilele șir reprezintă propierties. Acest lucru ar putea fi „masculin” și „feminin” (plus „gay”, „queer” sau orice doriți, chiar dacă acest lucru este încă foarte rar în datele științelor sociale). Sau ar putea fi codurile de țară menționate în introducere, adică „de”, „ES”, „Marea Britanie”, SUA” etc. Dacă trebuie să transformați acest lucru într-o variabilă numerică, fiecare categorie ar trebui să fie reprezentată de un număr diferit. Schimbarea de la șir la numeric este ușoară, encode fiind comanda la alegere:

encode cntry, gen(cntrynum)

va converti cntry la o variabilă numerică, cu caracterele din fosta variabilă șir ca etichete de valoare.

dacă din anumite motive doriți să convertiți o variabilă numerică într-o variabilă șir, puteți utiliza funcția complementară decode. Nu este surprinzător că Stata necesită ca variabila numerică să fie etichetată; aceste etichete vor fi folosite ca șiruri pentru a reprezenta diferitele valori.

numere „deghizate” ca șiruri

un caz special sunt variabile în care valorile numerice sunt stocate ca o variabilă șir, inclusiv cazurile în care valorile numerice sunt stocate împreună cu unele caractere (irelevante). Procedura destring oferă modalități de a converti o astfel de variabilă într-o variabilă numerică, lăsând valorile originale neschimbate (dacă constau doar din numere) sau eliminând orice caractere non-numerice.

forma generală a Comenzii este

destring varname(s), Opțiuni

cu cel puțin o opțiune fiind necesară. Cele mai importante opțiuni sunt:

  • generate(newvarnames): creează noi variabile
  • replace: înlocuiește vechea variabilă(s)
  • ignore("char1" ): elimină caracterele „char1”, „char2” etc.
  • force: modifică toate variabilele care conțin caractere care nu sunt menționate înforce la lipsă

nu este surprinzător, Stata oferă și comanda tostring care funcționează invers.

transformări de date pentru variabilele string

ceea ce urmează este o colecție destul de eterogenă. În special, există zeci de funcții care se referă la variabile de șir și voi acoperi doar o selecție foarte mică și arbitrară.

split

split este o comandă care funcționează pe o variabilă șir. Foarte evident, se va împărți în două minereu mai multe părți; se va face acest lucru crearea de noi variabile în timp ce lăsând variabila vechi neschimbat. Face acest lucru dacă există ceva în variabila originală care separă acele părți. În mod implicit, acest separator este un spațiu. Astfel, împărțirea unei variabile care conține ” Joe Brady „va avea ca rezultat două noi variabile, una conținând” Joe „și cealaltă conținând”Brady”. Rețineți că dacă există o persoană numită „Joe F. Brady” rezultatul va fi de trei variabile.

split namevariabila „name” va fi împărțită în variabile „name1”, „name2” etc., cu condiția să conțină semifabricate, desigur. Numărul de variabile noi va fi egal cu numărul de spații libere plus 1.

split name, parse(,) variabila „name” va fi împărțită folosind virgule în loc de spații libere ca separatoare. Puteți indica mai multe separatoare; de asemenea, separatoarele pot consta din mai multe caractere.

split lnum, destring părți ale „lnum” care reprezintă de fapt numere vor fi transformate în variabile numerice — dar numai dacă există numere pentru o nouă variabilă dată. De exemplu, dacă variabila „lnum” este „60 30” pentru un caz și „50 ab” pentru altul, noua variabilă „lnum1” va fi numerică (cu valorile 60 și 50) în timp ce „lnum2” va fi în continuare o variabilă șir (și în timp ce valoarea acestei variabile va fi 30 pentru primul caz, aceasta va fi în continuare tratată ca un șir)

split lnum, destring forcetoate variabilele noi vor fi numerice. Cu toate acestea, ori de câte ori apare o informație non-numerică, valoarea va lipsi. De exemplu, dacă ” lnum „este” 60 b30″, valoarea” lnum2 ” va lipsi.

split lnum, destring force ignore(abcd) toate variabilele noi vor fi numerice. Orice caractere” A”,” b”,” c ” sau ” d ” vor fi eliminate. Astfel, în exemplul anterior „b30 „va fi transformat în” 30″, iar rezultatul va fi într-adevăr o variabilă numerică.

split lnum, generate(ln) variabila „lnum” va fi împărțită în variabile „ln1”, „ln2” și așa mai departe.

egen cu capete ()

această funcție va extrage o „parte” dintr-o variabilă șir (spre deosebire de comanda split, care va crea la fel de multe variabile noi ca și „părți”). Ceea ce este o parte este definit de un separator. În mod ironic, în mod implicit ends() va extrage prima parte (sau cap, așa cum este numit în manualul Stata). În total, există trei posibilități:

egen firstname = ends(name)aceasta va extrage orice apare în” nume ” înainte de prima apariție a separatorului, care este implicit un spațiu gol. Acest lucru este echivalent cu egen firstname = ends(name), head. Dacă nu există separator, întregul șir conținut în „nume” va reapărea în „prenume”

egen lastname = ends(name), lastaceasta va extrage orice apare în” nume ” după ultima apariție a separatorului. Din nou, dacă nu există separator, întregul conținut al „name” va fi reprezentat în „lastname”.

egen endofname = ends(name), tail aceasta va extrage orice apare în „nume” după prima apariție a separatorului. Dacă nu există separator, rezultatul va fi un șir gol.

separatorul poate fi indicat prin punct(,). Astfel, egen firstname = ends(name) punct(,) va extrage orice apare în” nume ” înainte de prima apariție a unei virgule. Sunt posibile și alte separatoare, inclusiv cele formate din mai multe caractere, dar nu puteți indica mai multe separatoare.

strmatch ()

acesta poate fi utilizat împreună cu generate/replace. Se caută un „cuvânt”, sau mai exact, o secvență de caractere, ca în:

gen newvar = strmatch(oldvar,”somecharacters”)

variabila” newvar „va avea o valoare de 1 dacă” oldvar „constă din secvența”somecharacters”. Cu toate acestea, dacă sunteți doar în căutarea pentru „somecharacters” să apară undeva în „oldvar”, puteți utiliza

gen newvar = strmatch(oldvar, „*somecharacters*”)

care va căuta „somecharacters” să apară oriunde. Scrierea

gen newvar = strmatch(oldvar, „*somecharacters”)

va face ca Stata să caute „somecharacters” să apară la sfârșitul „oldvar”, indiferent de câte caractere preced „somecharacters”. Desigur, "somecharacters*" poate fi folosit, de asemenea.