为了解释我的问题,我使用以下示例数据集:
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”,但仅适用于日期= 2009年9月28日的情况。
这个例子是更大的数据库的一部分,更多的案例具有Project = YNTRAD和Data = 28-Sep-2009,所以我不能简单地首先选择所有具有2009年9月28日的案例,然后检查哪个这些情况中有Project = YNTRAD,然后替换。相反,我需要做的是:
我读了很多关于:
循环 -重复 -如果...
但是我不知道如何使用这些来解决这个问题。
我首先尝试制作一个仅包含最终需要更改的样本ID的列表(同样,这是一个更大的数据库的一部分)。
STRING SampleID2 (A20).
IF (Problem=1) SampleID2=SampleID.
EXECUTE.
AGGREGATE
/OUTFILE=*
/BREAK=SampleID2
/n_SampleID2=N.
这提供了仅具有SampleID的数据集,应该对其进行更改。但是,我不知道如何逐案读取此数据集并在整个文件中查找所有日期的每个SampleID,然后仅更改那些事例为Date = 28-Sep-2009。
答案 0 :(得分:1)
听起来,一旦我们确定了需要更改的ID,就在这里完成了棘手的部分。我们可以将AGGREGATE
与MODE=ADDVARIABLES
结合使用,以将问题ID计数器变量添加到我们的数据集中。从那里开始,就如您所愿。
* 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 .