2016-06-13 25 views
0

データベースで患者ごとの最初の症例番号でラグ/リード関数を処理するにはどうすればよいですか?データベースを再構築する

私は1k +変数と800k行のデータベースを持っています。 各行は血管のセグメント上の介入であり、1人の患者は複数の行=異なる血管セグメント上の多数の介入を有するが、すべてが同じ入院内にある。 4つの船があります。私はデータベースを再構築すると、各行=介入の4つの場合があります。 enter image description here

私がしたいことは、最後の二つの変数からすべてのデータを組み合わせることであるが、最初の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. 

:私は、以下のデータをポストしようとしていますIは、ラグ/リード関数と試みたが、私た

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. 

:私は入院あたり4行を持って、その行の介入に対応する各行がその下にデータを表示するように後私はExcelで貼り付けたコピーを持って残りの行を削除しますそれをwにすることはできませんORK

私は次のコードを持っている:

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が機能します。

種類は、あなたがあなたの計算でIDの変化をテストすることができ

+0

私はそれが非常に困難に既存のデータとあなたが取得しようとしている構造体の構造を理解するために見つけます。データサンプルをより明確に投稿する方法を見つけてください(例:DATA LIST - BEGIN DATA - END DATAを参照)。ここで完全なコマンドを投稿してください。 –

+0

私はこれに新しく、ベストを尽くそうとしています。私は実際にデータリストを取得することができませんでしたが、データセットがどのように見えるかのイメージを追加することができました。 – Karatekid

+0

元のデータのサンプルに対して完全なデータリストコマンドを使って投稿を編集しました。この例を使用してターゲットデータを作成し、正確に必要なものを明確にしてください。 –

答えて

0

について、VALUESがSPLITファイルと一緒にコマンドSHIFTを使用する方が簡単です。 SHIFT VALUESはスプリット境界を越えません。

+0

返信ありがとうございます:)私はあなたがIDの変更のためのテストとは何を意味するのか分かりません。それ、どうやったら出来るの?そのための構文コードはありますか? idnrまたはセグメントIDでファイルを分割する必要がありますか?各個人の最初の4つのケースに遅れの結果を貼り付けるにはどうすればよいですか?多くの質問を申し訳ありません:) – Karatekid

+0

分割ファイルを含むshiftコマンドは非常にうまく機能しましたが、4つの最上位の場合に問題があります。 分割ファイルby sid。 シフト値VARIABLE = Culprit_PCI RESULT = CPCI2 SHIFT = 4 4を変更する方法はありますか? – Karatekid

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. 
関連する問題