ОШИБКА: значение идентификатора «xxxxxxxxxxxx» встречается дважды в одной группе BY.при переносе сложного набора данных - PullRequest
0 голосов
/ 03 июля 2019

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

Вот как это выглядит сейчас:

ID   Class      Name    Weight Amount_lipids Amount_plasma LOD 


1   AAA Lead    1.55    44.0         10.0      5.00
1   AAB Mercury 1.55    222.0        100.0     75.00
2   AAA Lead    1.25    25.5         12.0      5.00

Я безуспешно пробовал разные формы Proc Transpose, и это кажется более сложным, чем то, с чем может справиться указание префикса.

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


ID Weight Lead_lip Lead_plas Lead_LOD Mercury_lip Mercury_plas Mercury_LOD
1  1.55   44.0     10.0       5.0     222.0   100.0        75.0
2  1.25   25.5     12.0       5.0     .           .        .

Я попытался выполнить двухэтапный процесс транспонирования, но получил следующую ошибку: ОШИБКА: значение идентификатора "xxxxxxxxxxxx" встречается дважды в одной группе BY

  by id weight name;
run;

proc transpose data=want_intermediate out=want;
  by id weight;
  id name _name_;
run;

1 Ответ

0 голосов
/ 03 июля 2019

Вероятно, у вас есть запись с таким же идентификатором и весом, поэтому она дублируется. Вы можете добавить счетчик для каждой записи ID и использовать его. Это транспонирование двойной ширины, и похоже, что ваш код обрезан. Итак, чтобы добавить перечислитель для каждого идентификатора:

data temp;
    set have;
    by id;
    if first.id then count=1;
    else count+1;
run;

Затем измените ваш PROC TRANSPOSE, чтобы использовать ID и счет в выражении BY.

...