String Proměnné

String proměnné, jednoduše řečeno, jsou proměnné, které obsahují nejen čísla, ale i další postavy (případně smíšené s čísly). Například Evropský sociální průzkum ukládá informace o zemi, kde byli respondenti dotazováni, v proměnné cntry, která obsahuje řetězce jako „DE“, „ES“, “ LT “ atd. Dalším termínem, který se často používá, jsou „alfanumerické“ proměnné, zjevně odkazující na „abecedu“, a tedy na písmena. Ve skutečnosti však proměnná řetězce může obsahovat znaky jako “ \ „nebo“ – „nebo“:“a tak dále-cokoli, co může klávesnice produkovat.

první část se zaměří na téma transformace řetězce na číselné proměnné. Druhá část představí některé další věci, které jsem považoval za užitečné. Ale v první řadě budu vydávat …

varování

od verze 14 podporuje stata Unicode (UTF-8). Pokud nevíte, co to znamená — jde o to, jak jsou znaky digitálně kódovány ve vašem počítači. (Slyšeli jste, že počítače používají bity, bajty a podobné věci k reprezentaci informací. Pokud zadáte a uložíte „a“, nenajdete na pevném disku „a“, ale nějaký počítačový kód, který se na obrazovce nebo na tiskárně transformuje na“ a“.) Unicode je mnohem univerzálnější než dřívější kódování jako ASCII nebo ANSII. To umožňuje spoustu znaků, které mají být zastoupeny, včetně mnoha z mnoha jazyků, které nepoužívají znaky, které jsou vidět zde (odvozený od, a ve většině části identické s těmi z latinské abecedy), ale spíše cyrilice, Thajské, nebo cokoliv jiného.

nebudu se zde podrobně zabývat, ale chci vás upozornit, že zde nejsou zahrnuty nové možnosti řešení znaků Unicode. Všimněte si zejména, že pro některé řetězcové funkce (například substr()) nyní existují ekvivalentní funkce pro práci zejména se znaky Unicode. Tyto funkce mají Názvy, které jsou kompozity u plus konvenční funkce, např. usubstr(). Všimněte si, že pokud se omezíte na znaky z původního kódu ASCII (něco, co učím a kážu po celá desetiletí), není třeba se obávat. Ale jinak si uvědomte, že některé věci mohou se Stata 14 fungovat jinak.

například německé přehlásky jsou zastoupeny odlišně ve Stata 13 a Stata 14, což má důsledky mimo zobrazení znaků. Například (německé) slovo für je řetězec délky tři ve Stata 13, ale délka řetězce je čtyři ve Stata 14. To také ovlivňuje výsledky funkcí, jako je strlen(). Protože strlen()odkazuje na použitou paměť (a nikoli na počet znaků, jak se objevují na obrazovce), výsledek strlen(für) bude také 4 ve Stata 14 na rozdíl od 3 ve Stata 13. Nová funkce ustrlen(für) naopak přinese 3. Jinými slovy, funkce „ustring“ odkazují na počet znaků, jak se zdají lidskému oku, nikoli na množství potřebné paměti.

z řetězce na číselné proměnné

i když Stata dokáže zpracovat řetězcové proměnné, je v mnoha ohledech jasné, že číselné proměnné jsou mnohem preferovány. V neposlední řadě většina statistických postupů prostě nepřijímá proměnné řetězce. Naštěstí Stata nabízí několik jednoduchých způsobů, jak převést řetězec na číselné proměnné(a naopak).

“ pouze řetězec “ proměnné

někdy řetězcové proměnné představují propierties. Může to být “ muž “ a “ žena „(plus“ gay“, „queer“ nebo cokoli, co chcete, i když je to v datech společenských věd stále velmi vzácné). Nebo by to mohly být kódy zemí uvedené v úvodu, to znamená „DE“, „ES“, „UK“, US“ atd. Pokud to potřebujete převést na číselnou proměnnou, každá kategorie by měla být reprezentována jiným číslem. Změna z řetězce na číselné je snadná, přičemž encode je příkazem podle vašeho výběru:

encode cntry, gen(cntrynum)

převede cntry na číselnou proměnnou se znaky z bývalé řetězcové proměnné jako štítky hodnot.

pokud chcete z nějakého důvodu převést číselnou proměnnou na řetězcovou proměnnou, můžete použít doplňkovou funkci decode. Není divu, že Stata vyžaduje, aby byla Číselná proměnná označena; tyto štítky budou použity jako řetězce k reprezentaci různých hodnot.

čísla „maskovaná“ jako řetězce

zvláštní případ jsou proměnné, kde jsou číselné hodnoty uloženy jako řetězcová proměnná, včetně případů, kdy jsou číselné hodnoty uloženy společně s některými (irelevantními) znaky. Postup destring nabízí způsoby, jak převést takovou proměnnou na číselnou proměnnou, ponechat původní hodnoty nezměněné (pokud se skládají pouze z čísel) nebo odstranit všechny nečíselné znaky.

obecná forma příkazu je

destring varname(s), volby

s alespoň jednou možností je vyžadována. Nejdůležitější možnosti jsou:

  • generate(newvarnames): vytváří nové proměnné
  • replace: nahrazuje staré proměnné(s)
  • ignore("char1" ): odstraňuje znaky „char1“, „char2“ atd.
  • force: změní všechny proměnné, které obsahují znaky, které nejsou uvedeny v force chybí

Není divu, Stata také nabízí příkaz tostring to funguje obráceně.

datové transformace pro řetězcové proměnné

následuje poměrně heterogenní sbírka. Zejména existují desítky funkcí, které odkazují na řetězcové proměnné, a budu pokrývat pouze velmi malý a libovolný výběr.

split

split je příkaz, který pracuje na proměnné řetězce. Je zřejmé, že ji rozdělí na další dvě části; vytvoří tak nové proměnné, zatímco starou proměnnou ponechá beze změny. Činí tak, pokud je v původní proměnné něco, co tyto části odděluje. Ve výchozím nastavení je tento oddělovač mezerou. Rozdělení proměnné obsahující “ Joe Brady „tedy povede ke dvěma novým proměnným, z nichž jedna obsahuje“ Joe „a druhá obsahuje“Brady“. Všimněte si, že pokud existuje osoba jménem „Joe F. Brady“, výsledkem budou tři proměnné.

split nameproměnná „name“ bude rozdělena na proměnné „name1″,“ name2 “ atd., za předpokladu, že obsahuje polotovary, samozřejmě. Počet nových proměnných se bude rovnat počtu polotovarů plus 1.

split name, parse(,)proměnná „name“ bude rozdělena pomocí čárek namísto mezer jako oddělovačů. Můžete uvést několik separátorů; také separátory mohou sestávat z více než jednoho znaku.

split lnum, destring části „lnum“, které ve skutečnosti představují čísla, budou přeměněny na číselné proměnné-ale pouze pokud existují čísla pro danou novou proměnnou. Například, pokud proměnná „lnum“ je „60 30“ pro jeden případ, a „50 ab“ pro další, novou proměnnou „lnum1“ budou číselné (s hodnotami 60 a 50), zatímco „lnum2“ bude stále být řetězec proměnné (a, zatímco hodnota této proměnné bude 30 pro první případ, to bude stále zacházeno jako řetězec)

split lnum, destring forceVšechny nové proměnné bude numeric. Přesto, kdykoli se objeví nečíselná informace, hodnota bude chybět. Například, pokud „lnum“ je „60 b30“, hodnota „lnum2“ bude chybět.

split lnum, destring force ignore(abcd)všechny nové proměnné budou číselné. Všechny znaky „a“, „b“, „c“ nebo „d“ budou zrušeny. V předchozím příkladu se tedy „b30 „změní na“ 30 “ a výsledkem bude skutečně Číselná proměnná.

split lnum, generate(ln) proměnná „lnum“bude rozdělena na proměnné „ln1″, “ ln2 “ a tak dále.

egen s končí()

Tato funkce bude extrahovat jednu „část“ z řetězcové proměnné (na rozdíl od split příkaz, který vytvoří tolik nových proměnných, jako jsou „částí“). To, co je část, je definováno oddělovačem. Je ironií, že ve výchozím nastavení ends() extrahuje první část (nebo hlavu, jak je pojmenována v příručce Stata). Celkově vzato, existují tři možnosti:

egen firstname = ends(name)tím se extrahuje vše, co se objeví v „name“ před prvním výskytem oddělovače, které jsou výchozí je jedno prázdné místo. To odpovídá egen firstname = ends(name), head. Pokud není oddělovač, celý řetězec obsažený v „name“ se znovu objeví v „firstname“

egen lastname = ends(name), lasttím se extrahuje vše, co se objeví v „jméno“ po posledním výskytu oddělovače. Opět platí, že pokud neexistuje oddělovač, celý obsah „name“ bude reprezentován v „lastname“.

egen endofname = ends(name), tailtím se extrahuje vše, co se objeví v „name“ po prvním výskytu oddělovače. Pokud není oddělovač, výsledkem bude prázdný řetězec.

oddělovač může být označen punct(,). egen firstname = ends(name) punct(,)tedy extrahuje vše, co se objeví v „jméno“ před prvním výskytem čárky. Jiné separátory jsou možné, včetně těch, které se skládají z několika znaků, ale nemůžete označit několik separátorů.

strmatch ()

to může být použito společně s generate/replace. To vypadá na „slovo“, nebo více přesně, posloupnost znaků, jako v:

gen newvar = strmatch(oldvar, „somecharacters“)

Proměnná „newvar“ bude mít hodnotu 1, pokud „oldvar“ se skládá z posloupnosti „somecharacters“. Nicméně, pokud jste právě hledáte pro „somecharacters“ se objeví někde v „oldvar“, můžete použít

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

, který bude vypadat pro „somecharacters“ se objeví kdekoli. Psaní

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

bude Stata podívejte se na „somecharacters“ se objeví na konci „oldvar“, bez ohledu na to, jak mnoho znaků předcházet „somecharacters“. Samozřejmě lze použít i "somecharacters*".