文字列変数
文字列変数は、単純に言えば、数字だけでなく、他の文字(おそらく数字と混合)も含む変数です。 たとえば、European Social Surveyには、回答者が調査された国に関する情報が変数cntry
に格納され、「DE」、「ES」、「LT」などの文字列が含まれています。 多くの場合、使用されている別の用語は、明らかに”アルファベット”を参照し、したがって、文字に、”英数字”変数です。 しかし、実際には文字列変数には、”\”や”-“や”-“などの文字が含まれている可能性があります。:”というように-キーボードが生成することができる何か。
最初のセクションでは、文字列を数値変数に変換するトピックに焦点を当てます。 第二のセクションでは、私が有用であることがわかったいくつかの他のものを紹介します。 しかし、まず第一に、私は発行します。..
警告
バージョン14では、StataはUnicode(UTF-8)をサポートしています。 あなたはそれが何を意味するかわからない場合—それは文字がコンピュータ上でデジタル符号化されている方法につい (コンピュータが情報を表すのにビット、バイトおよびそのような原料を使用することを聞いた。 “A”を入力して保存すると、ハードディスク上に”a”は見つかりませんが、画面またはプリンタ上で”a”に変換されたコンピュータコードが見つかります。 Unicodeは、ASCIIやANSIIなどの以前のコードよりもはるかに普遍的です。 これは、あなたがここに見ている文字を使用していない多数の言語からの多くを含む文字のトンを表現することができます(から派生し、ほとんどの部
ここでは詳細には触れませんが、Unicode文字を扱う新しい可能性はここではカバーされていないことを警告したいだけです。 特に、一部の文字列関数(substr()
など)では、特にUnicode文字を扱うための同等の関数があることに注意してください。 これらの関数は、u
と従来の関数、例えばusubstr()
の複合体である名前を持っています。 あなたが元のASCIIコード(私が何十年も教えてきたもの)からの文字に自分自身を制限する限り、心配する必要はないことに注意してください。 しかし、それ以外の場合は、Stata14とは異なる動作をする可能性があることに注意してください。
例えば、ドイツ語のウムラウトはStata13とStata14で異なって表現されており、これは文字の表示を超えた結果をもたらします。 例として、(ドイツ語の)単語fürは、Stata13では長さ3の文字列ですが、Stata14では文字列の長さは4です。 これはstrlen()
などの関数の結果にも影響します。 strlen()
は使用されたメモリを指します(画面に表示される文字数ではありません)ので、strlen(für)
の結果はStata14では4になりますが、Stata13では3になります。 これとは対照的に、新しい関数ustrlen(für)
は3を生成します。 言い換えれば、”ustring”関数は、必要なメモリの量ではなく、人間の目に見える文字の数を指します。
文字列から数値変数へ
Stataは文字列変数を処理できますが、数値変数がはるかに好ましいことは多くの点で明らかです。 少なくとも、ほとんどの統計手順は文字列変数を受け入れません。 幸いなことに、Stataは文字列を数値変数に変換するための簡単な方法をいくつか提供しています(その逆も同様です)。
“文字列のみ”変数
文字列変数は特性を表すことがあります。 これは「男性」と「女性」(プラス「ゲイ」、「奇妙な」、またはこれはまだ社会科学のデータでは非常にまれであっても、あなたが好きなもの)である可能性があります。 または、導入に記載されている国コード、つまり”DE”、”ES”、”UK”、”US”などである可能性があります。 これを数値変数に変換する必要がある場合は、各カテゴリを別の番号で表す必要があります。 文字列から数値への変更は簡単で、encode
が選択したコマンドです:
encode cntry,gen(cntrynum)
は、cntry
を数値変数に変換し、以前の文字列変数の文字を値ラベルとして使用します。
何らかの理由で数値変数を文字列変数に変換したい場合は、補完関数decode
を使用できます。 当然のことながら、Stataでは数値変数にラベルを付ける必要があり、これらのラベルは異なる値を表す文字列として使用されます。
文字列として”偽装”された数字
特殊なケースは、数値が文字列変数として格納される変数であり、数値がいくつかの(無関係な)文字とともに格納される プロシージャdestring
は、このような変数を数値変数に変換し、元の値を変更しない(数値のみで構成されている場合)か、数値以外の文字を削除する方法を提供しコマンドの一般的な形式は
destring varname(s)、options
で、少なくとも1つのオプションが必要です。 最も重要なオプションは次のとおりです:
-
generate(newvarnames)
: 新しい変数を作成します -
replace
: 古い変数を置き換えます) -
ignore("char1" )
: 文字”char1″、”char2″などを削除します。 -
force
:force
に記載されていない文字を含むすべての変数を
に変更します驚くことではありませんが、Stataはコマンドtostring
も提供しています。
文字列変数のデータ変換
以下は非常に異種のコレクションです。 特に、文字列変数を参照する数十の関数があり、私は非常に小さくて任意の選択だけをカバーします。
split
split
は、文字列変数で動作するコマンドです。 非常に明らかに、それはそれを2つの鉱石より多くの部分に分割します;それは古い変数を変更せずに新しい変数を作成します。 元の変数にそれらの部分を分離する何かがある場合はそうします。 デフォルトでは、この区切り文字はスペースです。 したがって、”Joe Brady”を含む変数を分割すると、”Joe”を含む変数と”Brady”を含む変数の2つの新しい変数が生成されます。 「Joe F.Brady」という名前の人がいる場合、結果は3つの変数になることに注意してください。
split name
変数”name”は変数”name1″、”name2″などに分割されます。 もちろん、空白が含まれている場合。 新しい変数の数は、空白の数に1を加えた数に等しくなります。
split name, parse(,)
変数”name”は、区切り文字として空白の代わりにカンマを使用して分割されます。 複数の区切り文字を指定できます; また、区切り文字は複数の文字で構成することもできます。
split lnum, destring
実際に数値を表す”lnum”の部分は数値変数に変換されますが、与えられた新しい変数の全体に数字がある場合に限ります。 たとえば、変数”lnum”があるケースでは”60 30″、別のケースでは”50ab”の場合、新しい変数”lnum1″は数値(値60と50)になりますが、”lnum2″は文字列変数になります(この変数の値は最初のケースでは30になりますが、これは文字列のように扱われます)
split lnum, destring force
新しい変数はすべて数値になります。 しかし、数値以外の情報が表示されるたびに、値が欠落します。 たとえば、”lnum”が”60b30″の場合、”lnum2″の値は欠落します。
split lnum, destring force ignore(abcd)
新しい変数はすべて数値になります。 「A」、「b」、「c」、または「d」の文字はすべて削除されます。 したがって、前の例では”b30″は”30″に変換され、結果は実際には数値変数になります。
split lnum, generate(ln)
変数”lnum”は、変数”ln1″、”ln2″などに分割されます。
egen with ends()
この関数は、文字列変数から一つの”部分”を抽出します(splitコマンドとは対照的に、”部分”があるのと同じくらい多くの新しい変数を作成します)。 部品が何であるかは、セパレータによって定義されます。 皮肉なことに、デフォルトではends()
は最初の部分(またはstata handbookで名前が付けられているようにhead)を抽出します。 すべてのすべてで、三つの可能性があります:
egen firstname = ends(name)
これにより、区切り文字の最初の出現の前に”name”に表示されるものが抽出されます。 これはegen firstname = ends(name), head
に相当します。 区切り文字がない場合、”name”に含まれる文字列全体が”firstname”に再表示されます”
egen lastname = ends(name), last
これにより、区切り文字の最後の出現の後に”name”に表示されるものが抽出されます。 繰り返しになりますが、区切り文字がない場合は、”name”の内容全体が”lastname”で表されます。
egen endofname = ends(name), tail
これは、区切り文字の最初の出現の後に”name”に表示されるものを抽出します。 区切り文字がない場合、結果は空の文字列になります。
区切り文字はpunct(,)
で示すことができます。 したがって、egen firstname = ends(name) punct(,)
は、カンマの最初の出現の前に”name”に表示されるものを抽出します。 複数の文字で構成される区切り文字を含め、他の区切り文字も使用できますが、複数の区切り文字を指定することはできません。
strmatch()
これはgenerate/replace
と一緒に使用することができます。 次のように、「単語」、より正確には一連の文字を検索します。
gen newvar=strmatch(oldvar,”somecharacters”)
“oldvar”がシーケンス”somecharacters”で構成されている場合、変数”newvar”の値は1になります。 ただし、「somecharacters」を「oldvar」のどこかに表示するだけの場合は、
gen newvar=strmatch(oldvar,”*somecharacters*”)
を使用して、「somecharacters」を検索してどこにでも表示することができます。
gen newvar=strmatch(oldvar,”*somecharacters”)
と書くと、Stataは”somecharacters”の前にいくつの文字があっても、”oldvar”の最後に”somecharacters”が表示されるようになります。 もちろん、"somecharacters*"
も使用することができます。