2016-05-04 4 views
0

У меня есть набор данных с именем, именем и фамилией. Я собираюсь объединить его с другим сопоставлением набора данных по тем же переменным. В одном наборе данных переменная mi выглядит следующим образом:Как удалить все содержимое строки, кроме первого символа?

Lowell 
Ann 
Carl 
A 
Fran 
Allen 

И я хочу, чтобы это выглядело как:

L 
A 
C 
A 
F 
A 

Я попытался это:

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

, но это делает противоположное что я хочу, но это самое близкое, что я смог сделать. Я знаю, что это, наверное, очень простая проблема, но сейчас я в тупике.

+1

С другой стороны, сокращение до одного символа будет более сложным. Ваш собственный пример показывает, что 'A' теперь очень неоднозначно. –

+0

@NickCox Я думаю, я забыл добавить, что я тоже слился с датой рождения. Данные уникальны при имени, имени, фамилии, уровне dob. В идеале у меня был бы уникальный идентификатор, но данные не всегда поступают так, как вам хочется :). – otteheng

ответ

3

Вы на правильном пути с 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 | 
    +--------------+ 

Второй и третий аргументы являются substr начальное положение и количество символов соответственно. В этом случае вы хотите начать с первого символа и взять один символ, поэтому substr(mi, 1, 1) - это то, что вам нужно.

+0

Конечно! Файл справки 'substr' всегда меня смущает. Спасибо за разъяснения. – otteheng

+1

Обратите внимание, что 'gen str1 mi1 = mi' является альтернативой грубой силы. Вы настаиваете на 'str1' как тип хранилища, поэтому есть только место для одного символа. –

+0

Это правда, и не менее важно, но я не могу не думать, что это похоже на грубый метод. – ander2ed

Смежные вопросы