proc transpose с повторяющимися значениями ID - PullRequest
0 голосов
/ 12 августа 2011

Мне нужна помощь с процедурой транспонирования в SAS.Мой код изначально был:

proc transpose data=temp out=temp1; 
by patid;
var text;
Id datanumber;
run;

Это дало мне ошибку "Значение идентификатора" "дважды встречается в одной группе BY".Я изменил код так:

proc sort data = temp; 
by patid text datanumber; 
run;

data temp; 
set temp by patid text datanumber; 
if first.datanunmber then n = 0; 
n+1; 
run;

proc sort data = temp; 
by patid text datanumber n; 
run;

proc transpose out=temp1 (drop=n) let;
by patid;
var text;
id datanumber;
run;

Это дает мне ошибку: переменная n не распознана.Добавление опции let приводит к большому количеству ошибок «происходит дважды в одной группе BY».Я хочу сохранить все значения идентификатора.

Пожалуйста, помогите мне в этом.

Пример данных: текст пациента

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

Когда вы получаете эту ошибку, она говорит вам, что у вас есть несколько точек данных для одной или нескольких переменных, которые вы пытаетесь создать. SAS может принудительно выполнить транспонирование и удалить дополнительные точки данных, если вы добавите «let» в строку транспонирования proc.

0 голосов
/ 26 сентября 2011

Ваши данные не уникальны? Я создал набор данных (с уникальными значениями «пати» и «номер данных») и транспонировал работы:

data temp (drop=x y);
do x=1 to 4;
    PATID='PATID'||left(x);
    do y=1 to 3;
        DATANUMBER='DATA'||left(y);
        TEXT='TEXT'||left(x*y);
        output;
    end;
end;
proc sort; by _all_; 
proc transpose out=temp2 (drop=_name_);
     by patid;
     var text;
     id datanumber;
run;

Я бы порекомендовал забыть исправление 'n' и сосредоточиться на том, чтобы сделать данные уникальными для числа пати и данных, грязный подход был бы:

proc sort data = temp nodupkey; 
by patid datanumber; 
run;

в начале вашего кода ..

...