25. 25
横軸3段重ねへの対応
それぞれ縦に変換して、後で列で結合
A D E F G H I J K L M N O
DPC6桁 010010 010020 010030
件数/日数 件数 在院日数 件数 在院日数 件数 在院日数
施設名 手術有 手術無 手術有 手術無 手術有 手術無 手術有 手術無 手術有 手術無 手術有 手術無
〇〇病院 10 11 1 5 0 3 4 2 5 0 8 3
△△病院 15 3 6 8 1 5 3 1 9 3 0 0
□□病院 8 4 3 4 12 4 9 2 8 2 3 7
列 DPC6桁
D 010010
E 010010
F 010010
G 010010
H 010020
I 010020
J 010020
K 010020
L 010030
M 010030
N 010030
O 010030
列 件数/日数
D 件数
E 件数
F 在院日数
G 在院日数
H 件数
I 件数
J 在院日数
K 在院日数
L 件数
M 件数
N 在院日数
O 在院日数
列 手術有無
D 手術有
E 手術無
F 手術有
G 手術無
H 手術有
I 手術無
J 手術有
K 手術無
L 手術有
M 手術無
N 手術有
O 手術無
1行名 3行名 4行名
Join Join
※2行目の病名は使いません。
列 施設名 値
D 〇〇病院 10
E 〇〇病院 11
F 〇〇病院 1
G 〇〇病院 5
H 〇〇病院 0
I 〇〇病院 3
J 〇〇病院 4
K 〇〇病院 2
L 〇〇病院 5
M 〇〇病院 0
N 〇〇病院 8
O 〇〇病院 3
D △△病院 :
E : :
5行名以降は施設名別に値を持つ
Join
1行目
3行目
4行目
5行目
以降
27. 27
データ加工のスクリプト2
Crosstableを使って、1行目を縦持に変換する。
Temp2:
CrossTable(列,DPC6桁,1)
Load *
Resident Temp
Where RecNo()=1;
← 先ほど全件読んだテーブルからロードする。Excelから読むより早い
← 1件目のみロードする
A 列 DPC6桁
D 010010
E
F
G
H 010020
I
J
K
L 010030
M
N
O
CrossTableは値のはいっていない部分のデータは作成しない。
1行目にDPC6桁が入っている列しかデータができない。
最初のLoad文に NullAsValue をつけて、Nullを値として
扱い、 Set NullValue = 〇〇でNull値を置き換える。
前頁の例では「NULL」という文字を入れている。
すべての列のデータはできるが、DPC6桁が入っていない。
課題
解決
課題
最初の列
↓
列名縦
↓
NullAsValueの
効果でデータはで
きるが、DPC6桁
は入っていない
28. 28
データ加工のスクリプト3
DPC6桁が入っていなければ前のデータの値を設定する
Temp3:
Load
列,
If([DPC6桁] = ‘NULL’, Peek([DPC6桁]),[DPC6桁]) as [DPC6桁]
Resident Temp2;
Drop table Temp2;
A 列 DPC6桁
D 010010
E 010010
F 010010
G 010010
H 010020
I 010020
J 010020
K 010020
L 010030
M 010030
N 010030
O 010030
← 「NULL」と文字が入っていたら1件前のDPC6桁を
設定する
← Temp2はもう不要なので削除する
Peek(項目名) 1行前にロードされた行の値を算出
If([DPC6桁] = ‘NULL’, Peek([DPC6桁]),[DPC6桁]) as [DPC6桁]
DPC6桁の欄に、「NULL」と文字が入っていたら1件前のDPC6桁を
そうでなければそのままDPC6桁を、
DPC6桁という項目に設定する
すべての行にDPC6桁が設定される
29. 29
データ加工のスクリプト4
以降の行も同様に処理する
5行名以降
Temp12:
CrossTable(列,件数_日数,1)
Load *
Resident Temp
Where RecNo()=3;
Temp13:
Load
列,
If([件数_日数] = 'NULL', Peek([件数_日数]),[件数_日数]) as [件数_日数]
Resident Temp12;
Drop tables Temp12;
3行名 4行名
Temp22:
CrossTable(列,手術有無等,1)
Load *
Resident Temp
Where RecNo()=4;
Temp32:
CrossTable(列,数値,1)
Load *
Resident Temp
Where RecNo()>4;
Drop tables Temp;
Drop fields A from
Temp22;
A項目には何も入っていないので削除*
*Temp2, Temp12にもA項目はあるが、Temp3, Temp13をロードする際にA項
目はロードしていないので、削除する必要がない。