2014-12-08 2 views
3

У меня есть набор данных, который выглядит, как это, и я использую SAS Enterprise Guide 6.3:Транспонирование разделенных запятыми поля

data have; 
    input id state $; 
    cards; 
134 NC,NY,SC 
145 AL,NC,NY,SC 
; 
run; 

У меня есть еще один набор данных, который имеет несколько метрик для каждого идентификатора в каждом штате, но я только необходимо вывести данные для состояний, перечисленных во втором столбце набора данных.

data complete; 
    input id state $ metric; 
cards; 
134 AL 5 
134 NC 4.3 
134 NY 4 
134 SC 5.5 
145 AL 1.3 
145 NC 1.3 
145 NY 1.5 
145 SC 1.1 
177 AL 10 
177 NC 74 
177 NY 23 
177 SC 33 
; 
run; 

Я думал об использовании trnwrd заменить запятую «» и конкатенации начало и конец цитаты, чтобы сделать список список символов, так что я мог бы использовать где в заявлении. Тем не менее, я думаю, что было бы полезно, если бы я мог как-то переставить запятую на что-то вроде этого:

data have_mod; 
     input id state $; 
     cards; 
    134 NC 
    134 NY 
    134 SC 
    145 AL 
    145 NC 
    145 NY 
    145 SC 
    ; 
    run; 

Тогда я мог бы просто присоединиться к этой таблице полной таблицы данных, чтобы получить подмножество мне нужно (ниже).

data want; 
    input id state $ metric; 
cards; 
134 NC 4.3 
134 NY 4 
134 SC 5.5 
145 AL 1.3 
145 NC 1.3 
145 NY 1.5 
145 SC 1.1 
; 
run; 

Любые мысли? Благодарю.

+0

6.3 означает 6.1 и 9.3 Я предполагаю? Или что-то другое? (Версии, с которыми я знаком, являются 4.1, 4.3, 5.1, 6.1, 7.1, если нет меньших версий, о которых я никогда не слышал?) – Joe

+0

Да 6.1 извините. Благодарю. – pyll

ответ

3

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

data have; 
    infile datalines truncover dlm=', '; 
    length state $2; 
    input id @; *read in the id for that line; 
     do until (state=''); *keep reading in until state is missing = EOL; 
      input state $ @; 
      if not missing(state) then output; 
     end; 
    cards; 
134 NC,NY,SC 
145 AL,NC,NY,SC 
; 
run; 

В качестве альтернативы, вы можете SCAN для первого statecode.

data want_to_merge; 
    set have; 
    state_first = scan(state,1,','); 
run; 

SCAN функция эквивалент чтения в файл с разделителями.

+0

Спасибо, Джо. Это делает трюк. – pyll

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