String változók

a String változók egyszerűen szólva olyan változók, amelyek nemcsak számokat tartalmaznak, hanem más karaktereket is (esetleg számokkal keverve). Az Európai Szociális felmérés például a cntry változóban tárolja az információt arról az országról, ahol a válaszadókat megkérdezték, amely olyan karakterláncokat tartalmaz, mint a “DE”, “ES, “LT” stb. Egy másik gyakran használt kifejezés az “alfanumerikus” változók, nyilvánvalóan utalva a az “ábécé”, ezért betűkre. De valójában egy string változó tartalmazhat olyan karaktereket, mint ” \ “vagy” – “vagy”:”és így tovább — bármi, amit egy billentyűzet előállíthat.

az első szakasz a karakterlánc numerikus változókká történő átalakításának témájára összpontosít. A második rész néhány más dolgot mutat be, amelyeket hasznosnak találtam. De először is fogok kiadni egy …

figyelmeztetés

a 14-es verziótól kezdve a Stata támogatja az Unicode-ot (UTF-8). Ha nem tudja, mit jelent ez-arról szól, hogy a karakterek hogyan vannak digitálisan kódolva a számítógépen. (Hallottátok, hogy a számítógépek biteket, bájtokat és hasonló dolgokat használnak az információk ábrázolására. Ha “a” – t ír be és ment, akkor nem “a” – t talál a merevlemezen, hanem valamilyen számítógépes kódot, amely “a” – vá alakul át a képernyőn vagy a nyomtatón.) Az Unicode sokkal univerzálisabb, mint a korábbi kódolások, például az ASCII vagy az ANSII. Ez lehetővé teszi rengeteg karakter ábrázolását, köztük sok olyan nyelvből, amelyek nem használják az itt látható karaktereket (a Latin ábécéből származnak, és a legtöbb részben megegyeznek a latin ábécével), hanem cirill, Thai vagy bármi más.

itt nem részletezem, de csak figyelmeztetni szeretném, hogy az Unicode karakterek kezelésének új lehetőségei itt nem szerepelnek. Különösen vegye figyelembe, hogy egyes karakterlánc-függvényeknél (például substr()) ma már vannak egyenértékű függvények, amelyek különösen az Unicode karakterekkel foglalkoznak. Ezeknek a függvényeknek olyan nevei vannak, amelyek u kompozitok, plusz a hagyományos függvény, például usubstr(). Ne feledje, hogy mindaddig, amíg az eredeti ASCII kód karaktereire korlátozódik (amit évtizedek óta tanítok és prédikálok), nem kell aggódnia. De egyébként ne feledje, hogy egyes dolgok másképp működhetnek a Stata 14-rel.

például a német umlaute a Stata 13-ban és a Stata 14-ben eltérően van ábrázolva, és ennek a karakterek megjelenítésén túl is vannak következményei. Például a (német) szó F ons egy hármas hosszúságú karakterlánc a 13.Stata-ban, de a 14. Stata-ban a karakterlánc hossza négy. Ez befolyásolja az olyan funkciók eredményeit is, mint a strlen(). Mivel a strlen() a használt memóriára utal (nem pedig a képernyőn megjelenő karakterek számára), a strlen(für) eredménye szintén 4 lesz a Stata 14-ben, szemben a 3-mal a Stata 13-ban. Az új ustrlen(für) függvény ezzel szemben 3-at eredményez. Más szavakkal ,az” ustring ” függvények az emberi szem számára megjelenő karakterek számára utalnak, nem pedig a szükséges memória mennyiségére.

a karakterlánctól a numerikus változókig

annak ellenére, hogy a Stata képes kezelni a karakterlánc változókat, sok szempontból egyértelmű, hogy a numerikus változók sokkal előnyösebbek. Nem utolsósorban, a legtöbb statisztikai eljárás egyszerűen nem fogadja el a karakterlánc változókat. Szerencsére a Stata néhány egyszerű módszert kínál a karakterlánc numerikus változókká konvertálására (és fordítva).

“csak String” változók

néha a string változók propierties-t képviselnek. Ez lehet ” férfi “és” nő “(plusz” meleg”,” furcsa”, vagy bármi, amit akarsz, még akkor is, ha ez még mindig nagyon ritka a társadalomtudományi adatokban). Vagy lehetnek a bevezetőben említett országkódok, Vagyis “DE”, “ES”,” UK”, US ” stb. Ha ezt numerikus változóvá kell átalakítania, akkor minden kategóriát más számmal kell ábrázolni. A karakterláncról a numerikusra váltás egyszerű, a encode a választott parancs:

kódolja a cntry-t, gen(cntrynum)

a cntry numerikus változóvá konvertálja, az előző karakterlánc-változó karaktereit értékcímkékként.

ha valamilyen okból egy numerikus változót string változóvá kíván konvertálni, használhatja a decode kiegészítő funkciót. Nem meglepő, hogy a Stata megköveteli a Numerikus változó címkézését; ezeket a címkéket karakterláncként használják a különböző értékek ábrázolására.

karakterláncként “álcázott” számok

speciális esetek azok a változók, ahol a numerikus értékeket string változóként tárolják, beleértve azokat az eseteket is, amikor a numerikus értékeket néhány (irreleváns) karakterrel együtt tárolják. Eljárás destring lehetőséget kínál egy ilyen változó numerikus változóvá konvertálására, az eredeti értékek változatlanul hagyásával (ha csak számokból állnak) vagy a nem numerikus karakterek eltávolításával.

a parancs általános formája

varname(ek) megsemmisítése, opciók

legalább egy opcióval. A legfontosabb lehetőségek a következők:

  • generate(newvarnames): új változókat hoz létre
  • replace: lecseréli a régi változót (változókat))
  • ignore("char1" ): eltávolítja a “char1”, “char2” stb.
  • force: megváltoztatja az összes olyan változót, amely a force – ban nem említett karaktereket tartalmaz hiányzó

nem meglepő, hogy a Stata a tostring parancsot is kínálja, amely fordítva működik.

Adattranszformációk karakterláncváltozókhoz

az alábbiakban egy meglehetősen heterogén gyűjtemény Található. Különösen több tucat függvény van, amelyek string változókra utalnak, és csak egy nagyon kicsi és önkényes választékot fogok lefedni.

split

split egy parancs, amely egy string változón működik. Nagyon nyilvánvaló, hogy két vagy több részre osztja; új változókat hoz létre, miközben a régi változót változatlanul hagyja. Ezt akkor teszi, ha van valami az eredeti változóban, amely elválasztja ezeket a részeket. Alapértelmezés szerint ez az elválasztó szóköz. Így a “Joe Brady” – t tartalmazó változó felosztása két új változót eredményez, az egyik a “Joe” – t, a másik a “Brady” – t tartalmazza. Ne feledje, hogy ha van egy “Joe F. Brady” nevű személy, az eredmény három változó lesz.

split name a “name” változó a “name1”, “name2” stb., feltéve, hogy tartalmaz üres, természetesen. Az új változók száma megegyezik az üres helyek számával plusz 1.

split name, parse(,) a “name” változó elválasztóként vesszővel lesz felosztva az üres részek helyett. Több elválasztót is megjelölhet; az elválasztók egynél több karakterből is állhatnak.

split lnum, destring az “lnum” azon részei, amelyek valójában számokat képviselnek, numerikus változókká válnak — de csak akkor, ha egy adott új változóhoz egész számok vannak. Például, ha az “lnum” változó egy esetben “60 30”, egy másik esetben “50 ab”, az új “lnum1” változó numerikus lesz (60 és 50 értékkel), míg az “lnum2” továbbra is string változó lesz (és bár ennek a változónak az értéke 30 lesz az első esetben, ezt továbbra is karakterláncként kezeljük)

split lnum, destring forceaz összes új változó numerikus lesz. Mégis, amikor egy nem numerikus információ jelenik meg, az érték hiányzik. Például, ha az ” lnum “értéke” 60 b30″, akkor az” lnum2 ” értéke hiányzik.

split lnum, destring force ignore(abcd) az összes új változó numerikus lesz. Az “A”, “b”, “c” vagy “d” karakterek eldobásra kerülnek. Így az előző példában a” b30 “” 30 ” – ra változik, és az eredmény valóban Numerikus változó lesz.

split lnum, generate(ln) az “lnum” változó “ln1”, “ln2” és így tovább változókra oszlik.

egen with ends()

ez a függvény kivonja az egyik “részt” egy string változóból (ellentétben a split paranccsal, amely annyi új változót hoz létre, ahány “rész”van). Mi egy része határozza meg a szeparátor. Ironikus módon alapértelmezés szerint a ends() kibontja az első részt (vagy fejet, ahogy a Stata kézikönyvben meg van nevezve). Összességében három lehetőség van:

egen firstname = ends(name)ez kibontja mindazt, ami megjelenik a “név” az elválasztó első előfordulása előtt, amely alapértelmezés szerint egy üres hely. Ez egyenértékű a egen firstname = ends(name), headértékkel. Ha nincs elválasztó, akkor a “név” – ben található teljes karakterlánc újra megjelenik a “keresztnév” – ben”

egen lastname = ends(name), lastez kibontja mindazt, ami a “név” – ben jelenik meg az elválasztó utolsó előfordulása után. Ismét, ha nincs elválasztó, a “név” teljes tartalma a “vezetéknév” – ben jelenik meg.

egen endofname = ends(name), tail ez kivonja mindazt, ami a “név” – ben megjelenik az elválasztó első előfordulása után. Ha nincs elválasztó, az eredmény üres karakterlánc lesz.

az elválasztót punct(,) jelölheti. Így a egen firstname = ends(name) punct(,)kibontja mindazt, ami a “név” – ben megjelenik a vessző első előfordulása előtt. Más elválasztók is lehetségesek, beleértve a több karakterből álló elválasztókat is, de több elválasztót nem jelölhet meg.

strmatch()

ez a generate/replace – vel együtt használható. Keres egy “szót”, vagy pontosabban egy karaktersorozatot, mint például:

gen newvar = strmatch(oldvar,”somecharacters”)

a” newvar “változó értéke 1 lesz, ha az” oldvar “a”somecharacters” sorozatból áll. Azonban, ha csak keres “somecharacters” jelenik meg valahol “oldvar”, akkor használhatja

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

amely megkeresi a” somecharacters ” jelenik meg bárhol. Írás

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

arra készteti a Statát, hogy “somecharacters” – t keressen az “oldvar” végén, függetlenül attól, hogy hány karakter előzi meg a “somecharacters” – t. Természetesen a "somecharacters*" is használható.