重建数据库

时间:2016-06-13 14:34:34

标签: database database-design spss lag lead

如何让滞后/导联功能处理我数据库中每位患者的第一个病例编号?

我有一个1k +变量和800k行的数据库。 每排是对血管段的干预,一个患者可能有几排=在不同血管段上进行多次干预,但都在同一住院治疗中。当我重组数据库时,我有4个容器,每行4个案例=干预。我试图发布以下数据:

data list list /id_nr (f6) segment_id_nr (f6) date (date9) C_RCA (f6) C_LM (f6) C_LAD (f6) C_LCx (f6) VESSEL(a3)  max_stenos (f6) Culprit_PCI (f6) Procedure_type (f6).
BEGIN DATA
1, 5, 12-Jun-06, 1.00, .00, .00, .00, RCA, 3.00, 1.00, 2.00
1, 5, 12-Jun-06, 1.00, .00, .00, .00, LM, 1.00, , 
1, 5, 12-Jun-06, 1.00, .00, .00, .00, LAD, 4.00, , 
1, 5, 12-Jun-06, 1.00, .00, .00, .00, LCX, 1.00, , 
1, 5, 12-Jun-06, 1.00, .00, .00, .00, RCA, 3.00, 1.00, 2.00
1, 5, 12-Jun-06, 1.00, .00, .00, .00, LM, 1.00, , 
1, 5, 12-Jun-06, 1.00, .00, .00, .00, LAD, 4.00, , 
1, 5, 12-Jun-06, 1.00, .00, .00, .00, LCX, 1.00, , 
1, 5, 12-Jun-06, .00, .00, 1.00, .00, RCA, 3.00, , 
1, 5, 12-Jun-06, .00, .00, 1.00, .00, LM, 1.00, , 
1, 5, 12-Jun-06, .00, .00, 1.00, .00, LAD, 4.00, 1.00, 2.00
1, 5, 12-Jun-06, .00, .00, 1.00, .00, LCX, 1.00, , 
END DATA.
dataset name OrigData.

看起来应该是这样的:enter image description here

我想要的是将最后两个变量中的所有数据组合在前4行中,然后删除剩余的行,这样我每次住院就有4行,每行对应该行中的干预,请看下面的数据我在excel中粘贴了复制品:

data list list /id_nr (f6) segment_id_nr (f6) date (date9) C_RCA (f6) C_LM (f6) C_LAD (f6) C_LCx (f6) VESSEL(a3)  max_stenos (f6) Culprit_PCI (f6)         Procedure_type (f6) Culprit_PCI2 (f6)  Procedure_type2 (f6).
BEGIN DATA
1, 5, 12-Jun-06, 1.00, .00, .00, .00, RCA, 3.00, 1.00, 2.00,1.00, 2.00
1, 5, 12-Jun-06, 1.00, .00, .00, .00, LM, 1.00, , , ,
1, 5, 12-Jun-06, 1.00, .00, .00, .00, LAD, 4.00, , ,1.00, 2.00
1, 5, 12-Jun-06, 1.00, .00, .00, .00, LCX, 1.00, , , ,
END DATA. 
dataset name OrigData.

我尝试过使用滞后/导联功能,但我无法让它工作

我有以下代码:

compute seq = $casenum.
execute.
SORT CASES BY seq.
CREATE PCI_other_segmentvessel = LAG(Culprit_PCI,4).
CREATE proceduret_type2 = LEAD(procedure_type).
Execute.

这可能吗?这可能是一个滞后

IF sid= lag(sid) and Vessel=lag(Vessel) PCI2 = lag(Culprit_PCI,4).
Execute.

这些都不正常。你能指出我正确的方向吗?我不知道数据是否可行,但如果将副本粘贴到excel中则可行。

亲切的问候

2 个答案:

答案 0 :(得分:0)

您可以在计算中测试ID的更改,但更容易使用SHIFT VALUES命令和SPLIT FILES。换档值不会跨越分界线。

答案 1 :(得分:0)

你说在经过一些重组之后你已经达到了这种状况 - 我强烈建议你用原始结构和你想要达到的最终结构开始一个新的问题,我们很有可能找到一个更简单的快捷方式。不知道这一点 假设您必须完成这一点,以下语法将创建与目标结构非常相似的内容,包括删除多余的行。我希望这有助于我不完全确定我完全理解你需要的东西:

*creating sample data (a bit different from your original sample, to help the demonstration work).
data list list /id_nr (f6) segment_id_nr (f6) date (date9) C_RCA (f6) C_LM (f6) C_LAD (f6) C_LCx (f6) VESSEL(a3)  max_stenos (f6) Culprit_PCI (f6) Procedure_type (f6).
BEGIN DATA
1, 5, 12-Jun-06, 1.00, .00, .00, .00, RCA, 3.00, 1.00, 2.00
1, 5, 12-Jun-06, 1.00, .00, .00, .00, LM, 1.00, , 
1, 5, 12-Jun-06, 1.00, .00, .00, .00, LAD, 4.00, , 
1, 5, 12-Jun-06, 1.00, .00, .00, .00, LCX, 1.00, , 
1, 5, 12-Jun-06, 1.00, .00, .00, .00, RCA, 3.00, 2.00, 1.00
1, 5, 12-Jun-06, 1.00, .00, .00, .00, LM, 1.00, , 
1, 5, 12-Jun-06, 1.00, .00, .00, .00, LAD, 4.00, , 
1, 5, 12-Jun-06, 1.00, .00, .00, .00, LCX, 1.00, , 
1, 5, 12-Jun-06, .00, .00, 1.00, .00, RCA, 3.00, , 
1, 5, 12-Jun-06, .00, .00, 1.00, .00, LM, 1.00, , 
1, 5, 12-Jun-06, .00, .00, 1.00, .00, LAD, 4.00, 1.00, 2.00
1, 5, 12-Jun-06, .00, .00, 1.00, .00, LCX, 1.00, , 
END DATA.
dataset name OrigData.

* removing empty lines .
select if not missing(Culprit_PCI).

* counting occurrences of each vessel to use as index.
sort cases by id_nr segment_id_nr date VESSEL.
compute tmp=1.
split file by id_nr segment_id_nr date VESSEL.
CREATE ProcNum=CSUM(tmp).
split file off.

* restructuring.
format ProcNum(f6).
sort cases by  ‎‪id_nr‬‎ ‎‪segment_id_nr‬‎ ‎‪date‬‎ ‎‪C_RCA‬‎ ‎‪C_LM‬‎ ‎‪C_LAD‬‎ ‎‪C_LCx‬‎ ‎‪VESSEL  ‎‪max_stenos ProcNum.
casestovars /id= ‎‪id_nr‬‎ ‎‪segment_id_nr‬‎ ‎‪date‬‎ ‎‪C_RCA‬‎ ‎‪C_LM‬‎ ‎‪C_LAD‬‎ ‎‪C_LCx‬‎ ‎‪VESSEL  ‎‪max_stenos/index ProcNum /drop=tmp/separator="_"/groupby=index.