Транспонирование (CaseToVars) в SPSS и переименование переменных с существующими переменными - PullRequest
1 голос
/ 08 октября 2019

Набор данных содержит 6 переменных, таких как:

StudentID  Sequence  Metric  Score  Interpretation  ScoreName
a123       8.00      13      540    12              P1_AIE
a123       9.00      14      550    19              P2_AIE
a123       9.00      15      500    13              P1_BP
a124       8.00      14      450    11              P2_AIE

В конечном итоге я пытаюсь поместить все дела в одну строку, например:

StudentID P1_AIE_Seq  P1_AIE_Scr P1_AIE_Interp P2_AIE_Seq P2_AIE_Scr P2_AIE_Interp P1_BP_Seq etc.
a123       8.00       540        12            9.00       550        19            9.00      etc.
a124                                           8.00       450        11 

Это студенты (StudentID), которыеповторно выполнить батарею тестов (последовательность);их результаты (Оценка) отслеживаются с помощью числового значения (Метрика) и строки (ScoreName), и для интерпретации каждой оценки (Интерпретация) прикрепляется числовой код.

Метрика и ScoreName всегда соответствуют (т. Е. 14 = P2_AIE во всех случаях). Там нет повторяющихся записей. Последовательность изначально не подходит для использования в качестве индекса, потому что она повторяется в переменной ID, но чтобы обойти это, я использую:

SORT CASES  BY StudentID Sequence.
compute dup = 0.
if $casenum>1 and lag(StudentID)= StudentID and lag(sequence) = Sequence dup=lag(dup)+1.
sort cases by StudentID dup Sequence.
CASESTOVARS    
/ID = StudentID dup
/Index = Sequence
/GROUPBY = Index/sep="_".

Я явно неправильно строю синтаксис - это не такпоместите один случай в строку, он не будет переименовывать переменные в ScoreName - даже не уверен, что SPSS может сделать это без Python.

Любая обратная связь или совет будет принята с благодарностью

1 Ответ

0 голосов
/ 11 октября 2019

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

Это воссоздает данные вашего примера:

data list list /StudentID (a4) Sequence  Metric  Score  Interpretation  (4f3) ScoreName (a6).
begin data.
"a123"       8      13      540    12    "P1_AIE"
"a123"       9      14      550    19    "P2_AIE"
"a123"       9      15      500    13    "P1_BP"
"a124"       8      14      450    11    "P2_AIE"
end data.

Теперь, если вы выполните следующее, вы получите все данные для каждого идентификатора в одной строке:

sort cases by studentID ScoreName.
casestovars /id=studentID /index=ScoreName/sep="_"/groupby=index.
...