В настоящее время я пытаюсь присоединиться к 2 наборам данных, используя синтаксис SPSS, но борюсь, поскольку у меня есть повторяющиеся значения в ключах. Я хотел бы, чтобы объединенные данные дублировались для каждого экземпляра ключа в исходном наборе данных (или наоборот, поскольку не имеет значения, какой источник).
Наборы данных выглядят следующим образом:
Data1 (заполнитель для третьего столбца)
Данные2
Текущая попытка
То, что у меня есть только что, - это метод, в котором я CASETOVARS для Data1 перед сопоставлением его с Data2, а затем VARSTOCASES, чтобы расширить его. Это прекрасно работает с моими тестовыми данными, но, к сожалению, требует, чтобы я точно знал, сколько «прогонов» будет. Это не будет известно в производстве. Это может быть 1 или больше.
Есть ли способ объединить эти наборы данных при расширении объединенных данных в несколько случаев в источнике?
Я открыт для использования макросов, но не могу использовать для этого решения Python (что, вероятно, было бы проще!).
edit - К сожалению, я также не могу использовать расширения.
CASESTOVARS
/ID = batch .
DATASET ACTIVATE data2 .
MATCH FILES
/FILE = *
/TABLE = data1
/BY batch .
EXECUTE .
VARSTOCASES
/MAKE run FROM BATCH_RUN_ID.1 TO BATCH_RUN_ID.3 .
EXECUTE .
Чтобы завершить текущий подход, вы можете использовать команду расширения spssinc select variables
(см. примеры использования здесь и здесь и здесь). Вы будете использовать его для автоматического создания списка переменных, которые вы хотите назвать в своей команде varstocases
, чтобы синтаксис автоматически адаптировался к количеству запусков в данных:
Итак, после varstocases и файлов соответствия:
spssinc select variables macroname = "!from" /properties pattern = "BATCH_RUN_ID".
VARSTOCASES /MAKE run FROM !from .
Спасибо за ответ эл. К сожалению, я редактирую этот комментарий уже в третий раз, так как обнаружил, что обработчик статистики, который запускает наш синтаксис, не имеет расширения, и его исправление будет головной болью (сильно регулируемая отрасль). Хотя локально все работало отлично! Вы знаете какой-нибудь другой метод? Я читал подсказки об использовании циклов и макросов, но не смог понять это.
См. мой новый ответ для решения, не зависящего от Python.
Если Python и зависимая команда расширения недоступны, вот идея, как определить длину динамического списка для фазы varstocases
.
Что вы будете делать, так это создать новый набор данных с максимально возможным количеством прогонов, прикрепить к нему свой набор данных для чтения, а затем установить varstocases
для этого максимального количества прогонов (пустые строки удаляются автоматически):
dataset name orig.
data list free/throwthisrow (f1) BATCH_RUN_ID.1 to BATCH_RUN_ID.50 (50F8.2) .
begin data
1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
end data.
add files /file=* /file=orig .
EXECUTE.
select if missing(throwthisrow).
VARSTOCASES
/MAKE run FROM BATCH_RUN_ID.1 TO BATCH_RUN_ID.50 /drop throwthisrow.
EXECUTE .
Это фантастически креативное решение. У меня пока нет большого опыта работы с SPSS, но я узнаю, что он может быть более гибким, чем кажется. Убедить свое рабочее место разрешить Python в этом процессе действительно поможет, но в то же время это сработает.
Для совершенно другого подхода вы можете поискать
stats cartprod
.