2015-08-31 2 views
-1

У меня есть куча данных, которые я хотел бы свернуть несколькими переменными идентификатора и сохранить только не пропущенные значения других переменных. Для каждой уникальной комбинации id, title, info есть 1 значение var1/var2/var3, которое отсутствует, которое я хотел бы сохранить. Обратите внимание, что var3 является числовым, а var1/var2 - символом.SAS сворачивает данные по идентификаторам

У меня есть данные, как:

id title info     var1  var2  var3 
1 foo Some string here  string 1  
1 foo Some string here    string 2 
1 foo Some string here       number 3 
2 bar A different string string 4 string 5  
2 bar A different string      number 6 
3 baz Something else  string 7    number 8 

И я хочу, чтобы это было как:

id title info     var1  var2  var3 
1 foo Some string here  string 1 string 2 number 3 
2 bar A different string string 4 string 5 number 6 
3 baz Something else  string 7   number 8 

Спасибо!

+0

Вы действительно должны показать, что вы пробовали до сих пор. Пожалуйста, просмотрите http://stackoverflow.com/help/how-to-ask. –

+0

И/или Google SAS LOCF. – Quentin

ответ

1

Оператор UPDATE может справиться с этим. Будет использовано последнее не пропущенное значение. Оператор UPDATE принимает ровно два набора данных, мастер и транзакцию. У базового набора данных должно быть только одно наблюдение за группой. Но вы можете использовать свой единственный набор данных, используя опцию OBS = 0 для создания пустого базового набора данных.

Прежде всего, это ваши данные образца.

data have ; 
    infile cards dsd truncover ; 
    length id 8 title info var1-var3 $20 ; 
    input id -- var3 ; 
cards; 
1,foo,Some string here,string 1,, 
1,foo,Some string here,,string 2, 
1,foo,Some string here,,,number 3 
2,bar,A different string,string 4,string 5, 
2,bar,A different string,,,number 6 
3,baz,Something else,string 7,,number 8 
;;;; 

Вот этот шаг к краху.

data want ; 
    update have(obs=0) have ; 
    by id title info; 
run; 
Смежные вопросы