Объединение данных SPSS с повторяющимися ключами

В настоящее время я пытаюсь присоединиться к 2 наборам данных, используя синтаксис SPSS, но борюсь, поскольку у меня есть повторяющиеся значения в ключах. Я хотел бы, чтобы объединенные данные дублировались для каждого экземпляра ключа в исходном наборе данных (или наоборот, поскольку не имеет значения, какой источник).

Наборы данных выглядят следующим образом:

Data1 (заполнитель для третьего столбца)

партия бегать дата А 1 1 А 2 1 А 3 1 Б 1 1 С 1 1 С 2 1 Д 1 1 Е 1 1

Данные2

партия Значение1 Значение2 А 1 21 А 2 22 А 3 23 А 4 24 Б 5 25 Б 6 26 Б 7 27 Б 8 28 С 9 29 С 10 30 С 11 31 С 12 32 Д 13 33 Д 14 34 Д 15 35 Д 16 36 Е 17 37 Е 18 38 Е 19 39 Е 20 40

Текущая попытка

То, что у меня есть только что, - это метод, в котором я 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 .
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Чтобы завершить текущий подход, вы можете использовать команду расширения spssinc select variables (см. примеры использования здесь и здесь и здесь). Вы будете использовать его для автоматического создания списка переменных, которые вы хотите назвать в своей команде varstocases, чтобы синтаксис автоматически адаптировался к количеству запусков в данных:

Итак, после varstocases и файлов соответствия:

spssinc select variables macroname = "!from" /properties pattern = "BATCH_RUN_ID".
VARSTOCASES /MAKE run FROM !from .

Для совершенно другого подхода вы можете поискать stats cartprod.

eli-k 24.11.2022 18:00

Спасибо за ответ эл. К сожалению, я редактирую этот комментарий уже в третий раз, так как обнаружил, что обработчик статистики, который запускает наш синтаксис, не имеет расширения, и его исправление будет головной болью (сильно регулируемая отрасль). Хотя локально все работало отлично! Вы знаете какой-нибудь другой метод? Я читал подсказки об использовании циклов и макросов, но не смог понять это.

Jamsandwich 25.11.2022 11:53

См. мой новый ответ для решения, не зависящего от Python.

eli-k 25.11.2022 15:43
Ответ принят как подходящий

Если 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 в этом процессе действительно поможет, но в то же время это сработает.

Jamsandwich 06.12.2022 12:19

Другие вопросы по теме