Транспонирование сложного набора данных в SAS - PullRequest
1 голос
/ 26 июня 2019

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

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


ID   Class      Name    Weight Amount_lipids Amount_plasma LOD 
<br>
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 безуспешны, и это кажется более сложным, чем то, с чем может справиться указание префикса.

by participant_id;
var Name WEIGHT AMOUNT_LIPIDS AMOUNT_PLASMA LOD;
run;

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

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     .           .        .

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

1 Ответ

2 голосов
/ 26 июня 2019

Сложные преобразования обычно включают в себя более одного TRANSPOSE или DATA шагов с массивами.Иногда слишком сложное преобразование является намеком на то, что на самом деле необходима процедура отчетности, такая как tabulate или report вместо преобразования данных.

Вот двойное преобразование:

data have;
input ID   Class $     Name $   Weight Amount_lipids Amount_plasma LOD;datalines;
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
run;

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

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