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 aforce
– 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 force
az ö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), last
ez 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ó.