2016-05-04 12 views
0

私は、名、ミドルネーム、および姓のデータセットを持っています。同じ変数にマッチする別のデータセットとマージします。最初の文字以外の文字列の内容をすべて削除するにはどうすればよいですか?

Lowell 
Ann 
Carl 
A 
Fran 
Allen 

そして、私はそれが見えるようにしたい:私はこの試みた

L 
A 
C 
A 
F 
A 

gen mi2 = substr(mi, 2, length(mi)) 

をしかし、これはの反対を行う一つのデータで は次のようになり、変数miを設定しました私が欲しいのはそれだけど、私ができることはそれが一番近い。私はこれが本当に簡単な問題だと知っていますが、私は現時点で困っています。

+1

異なる注記では、1文字にするとマージが難しくなります。あなた自身の例では、 'A'は非常にあいまいです。 –

+0

@NickCox私は、誕生日にもマージしていると付け加えています。データは、ファーストネーム、ミドルネーム、ラストネーム、dobレベルでユニークです。理想的には私は一意のIDを持っていますが、データが常にあなたが望む方法で来るとは限りません:)。 – otteheng

答えて

3

あなたはsubstrで正しいトラックにいます。 substr

clear 

input str10 mi 
Lowell 
Ann 
Carl 
A 
Fran 
Allen 
end 

gen mi2 = substr(mi,1,1) 
list, sep(0) 

    +--------------+ 
    |  mi mi2 | 
    |--------------| 
    1. | Lowell  L | 
    2. | Ann  A | 
    3. | Carl  C | 
    4. |  A  A | 
    5. | Fran  F | 
    6. | Allen  A | 
    +--------------+ 

第二および第三の引き数は、それぞれ、開始位置および文字数である:以下の例を参照してください。この場合、最初の文字から開始して1文字を取りたいので、substr(mi, 1, 1)が必要です。

+0

もちろん! 'substr'へのヘルプファイルは、常に私を混乱させます。説明をありがとう。 – otteheng

+1

'gen str1 mi1 = mi'はブルートフォースの代替手段です。ストレージタイプとして 'str1'を主張するので、1文字のためのスペースしかありません。 –

+0

それは本当であり、同様に有効ですが、私は助けることができませんが、それは粗い方法のように感じると思う。 – ander2ed

関連する問題