Как считать список дел в одной переменной в SPSS и использовать это для добавления данных? - PullRequest
0 голосов
/ 17 мая 2019

Чтобы объяснить мою проблему, я использую этот пример набора данных:

SampleID  Date          Project   Problem
03D00173  03-Dec-2010   1,00
03D00173  03-Dec-2010   1,00
03D00173  28-Sep-2009             YNTRAD    
03D00173  28-Sep-2009             YNTRAD    

Теперь проблема в том, что мне нужно заменить текст "YNTRAD" на "YNTRAD_PILOT", но только для случаев с датой =28 сентября 2009 г.

Этот пример является частью гораздо более крупной базы данных, в которой гораздо больше дел имеют Project = YNTRAD и Data = 28 сентября 2009 г., поэтому я не могу просто сначала выбрать все дела с28 сентября 2009 г., затем проверьте, в каком из этих случаев есть Project = YNTRAD, и затем замените.Вместо этого мне нужно сделать следующее:

  1. Посмотрите на каждый случай, у которого в проблеме есть 1,00 (это проблемные случаи)
  2. Затем найдите SampleID, соответствующий этомуsample
  3. Затем найдите все другие случаи с тем же SampleID, НО WITH Date = 28-Sep-2009 (это необходимо, поскольку только эти образцы являются частью пилотного исследования), а затем замените YNTRAD в Project на YNTRAD_PILOT.

Я много читал о:

LOOP - ДЕЛАТЬ ПОВТОР - ДЕЛАТЬ ЕСЛИ

, но я не знаю, как использовать их для решения этой проблемы.

Сначала я попытался создать список, содержащий только идентификаторы образцов, которые в конечном итоге необходимо изменить (опять же, это часть гораздо большей базы данных).

STRING SampleID2 (A20).

IF (Problem=1) SampleID2=SampleID.
EXECUTE.

AGGREGATE
/OUTFILE=*
/BREAK=SampleID2
/n_SampleID2=N.

Это дает набор данных только сSampleID, для которых необходимо внести изменения.Однако я не знаю, как считывать этот набор данных в каждом конкретном случае и искать каждый SampleID в общем файле со всей датой, а затем изменять только те случаи, когда Date = 28-Sep-2009.

1 Ответ

1 голос
/ 17 мая 2019

Звучит так, как только мы можем определить идентификаторы, которые необходимо изменить, мы сделали сложную часть здесь. Мы можем использовать AGGREGATE с MODE=ADDVARIABLES, чтобы добавить переменную счетчика идентификатора проблемы в наш набор данных. Оттуда все как и следовало ожидать.

* Add var IdProblemCnt to your database . Stores # of times a given Id had a record with Problem = 1.
AGGREGATE
 /OUTFILE=* MODE=ADDVARIABLES
 /BREAK=SampleId
 /IdProblemCnt=CIN(Problem, 1, 1) .
EXE .

* once we've identified the "problem" Ids we can use `RECODE` Project var.
DO IF (IdProblemCnt>0 AND Date = DATE.MDY(9,28,2009) .
  RECODE Project ('YNTRAD' = 'YNTRAD_PILOT') .
END IF .
EXE .
...