У меня есть набор лабораторных результатов. Каждой строке соответствует точка времени субъекта (например: строка 1 является субъектом № 1 при первом посещении, строка 2 является предметом № 1 при его втором посещении, ...). В каждой строке у меня есть значения 5 тестов (test1, test2, ....), и для каждого теста у меня есть в дополнение к результату два столбца опорных значений теста (нормальный низкий и высокий уровни). Я хочу перенести данные таким образом, чтобы каждая строка была одинаковой для объекта + посещение + тест, с двумя столбцами, числовым результатом и статусом (нормальным или нет). Я не смог перенести данные. Мне удалось получить все тесты в длинном формате, но я не смог сохранить контрольные значения. Как я должен это делать ? Моя альтернатива - это набор утверждений if, это будет очень долго!Транспонирование данных в SAS
0
A
ответ
1
Этот вопрос был также размещен на community.sas.com. Двухэтапный процесс извлекает данные из PARAMCD (лабораторный тестовый код) и тип переменной (значения и пределы диапазона нормального диапазона) из имен. PARAMCD становится новой переменной id строки, а V L и H используются для создания новых имен переменных, когда данные снова переносятся в более или менее формат CDISC SDTM.
data A;
input ID Visit Group Test1 Test2 Test3 Test1_L Test1_H Test2_L Test2_H Test3_L Test3_H;
datalines;
1 1 0 5 3 6.7 1 10 2 7 3 9
1 2 0 5.5 3.8 8.7 1 10 2 7 3 6
1 3 0 4.5 2.8 5.7 1 10 3 7 3 6
2 1 1 5 3 6.7 1 10 2 7 3 9
2 2 1 5.5 3.8 8.7 1 10 2 7 3 9
2 3 1 4.5 2.8 5.7 1 10 2 7 3 9
;;;;
run;
proc print;
run;
proc transpose data=a out=b;
by id visit group;
run;
data b;
set b;
length paramcd $8 namecd $1;
call scan(_name_,1,p,l,'_');
paramcd = substrn(_name_,p,l);
namecd = coalesceC(substrn(_name_,p+l+1),'V');
drop p l _name_;
run;
proc sort data=b;
by id visit group paramcd;
run;
proc format;
value $namecd 'V'='Value' 'H'='High' 'L'='Low';
run;
proc transpose data=b out=c(drop=_name_);
by id visit group paramcd;
id namecd;
format namecd $namecd.;
var col1;
run;
data c;
set c;
length RangeFL $1;
if n(low,value) eq 2 and value lt low then RangeFL='L';
else if n(high,value) eq 2 and value gt high then RangeFL='H';
else RangeFL='N';
run;
proc print;
run;
Смежные вопросы
- 1. транспонирование с несколькими переменными в SAS
- 2. Транспонирование с широким длинным массивом в SAS
- 3. Транспонирование/Добавить новые colums в SAS
- 4. Транспонирование кадра данных
- 5. Транспонирование данных datatable
- 6. Транспонирование данных CSV в Perl
- 7. транспонирование данных с R
- 8. Транспонирование динамических данных
- 9. Транспонирование набора данных
- 10. MSEXCEL Транспонирование данных в формат базы данных
- 11. Транспонирование разделенных запятыми поля
- 12. гостирован данных в SAS
- 13. Извлечение данных в SAS
- 14. штабелирования данных в SAS
- 15. Транспонирование данных из каждой строки в столбцы
- 16. транспонирование данных в массиве с использованием NumPy
- 17. Транспонирование данных в словаре междунар и список
- 18. Транспонирование данных из столбцов в строки
- 19. Транспонирование данных в Excel не работает
- 20. Транспонирование запятых данных в строки - некоторые разъяснения
- 21. Транспонирование данных в C# Business Objects
- 22. Транспонирование и слияние наборов данных в R
- 23. Транспонирование разделов данных в Excel VBA
- 24. преобразование данных и транспонирование в Excel
- 25. Транспонирование группы данных в Excel или Access
- 26. транспонирование данные в улье
- 27. Транспонирование первенствует
- 28. Транспонирование столбцов в GridView
- 29. Транспонирование таблицы
- 30. Транспонирование с несколькими переменными и несколькими метриками в R
Пожалуйста, можете ли вы разместить некоторые данные о том, что у вас есть и что вы хотите, а также код, который вы уже пробовали. – Longfish