Merge and aggregate datasets: Difference between revisions

Harbour: bug fixes
(Harbour: bug fixes)
Line 820:
pStruct := {{"patient_id", "n", 8, 0}, {"lastname", "c", 10, 0 }}
dbCreate( "patient", pStruct,, .T., "patient" )
INSERT INTO patient (patient_id, lastname) VALUES (1001, "Hopper"), (20024004, "Wirth"), ;
(3003, "Kemeny"), (40042002, "Gosling"), (5005, "Kurtz")
INDEX ON patient_id TO pat_id
Line 828:
dbCreate( "visit", vStruct,, .T., "visit" )
INSERT INTO visit (patient_id, visit_date, score) VALUES (2002, ctod("2020-09-10"), 6.8)
INSERT INTO visit (patient_id, visit_date, score) VALUES (1001, ctod("2020-09-0717"), 5.5)
INSERT INTO visit (patient_id, visit_date, score) VALUES (4004, ctod("2020-09-24"), 8.4)
INSERT INTO visit (patient_id, visit_date) VALUES (2002, ctod("2020-10-08"))
INSERT INTO visit (patient_id, score) VALUES (1001, 6.6)
INSERT INTO visit (patient_id, visit_date) VALUES (3003, ctod("2020-11-12"))
INSERT INTO visit (patient_id, visit_date, score) VALUES (4004, ctod("2020-11-1205"), 7.0)
INSERT INTO visit (patient_id, visit_date, score) VALUES (1001, ctod("2020-11-19"), 5.3)
INDEX ON patient_id TO visit_id
Line 846:
DO WHILE ! Eof()
xCurId := patient_id && grouping variable
aAgg := {0, 0, 0.0, ctod("19000101")} && initial values
DO WHILE ! Eof() .AND. xCurId == patient_id
aAgg := {1+aAgg[1], iif(score==0.0,aAgg[2],1+aAgg[2]), score+aAgg[3], max(visit_date, aAgg[34])} && update
SKIP
ENDDO
INSERT INTO report (patient_id, n, sum_score, avg_score, max_date) ;
VALUES (xCurId, aAgg[1], aAgg[23], aAgg[23]/aAgg[12], aAgg[34])
ENDDO
 
Line 868:
 
<pre>NUM PATIENT_ID LASTNAME N SUM_SCORE AVG_SCORE MAX_DATE
1 1001 Hopper 3 17.4 5.8 2020-11-19
24 2002 Wirth Gosling 2 6.8 36.48 2020-10-08
3 3003 Kemeny 1 0.0 0.0 2020-11-12
42 4004 GoslingWirth 2 15.4 7.7 2020-11-1205
5 5005 Kurtz 0 0.0 0.0 - - </pre>
 
136

edits