I took the data you supplied and used DATA step views to get the data for each person's ID. To generate valid JSON, I used the JSON procedure (available in SAS 9.4). The output JSON snippet you posted did not appear to be valid. I was able to get the output pretty close to what you wanted. I hope this helps.
data work.ds1;
input person_id claim_id $ var1 var2 var3;
datalines;
1 ab 12 23 34
1 cc 34 45 32
2 ee 56 32 55
run;
data work.ds2;
input person_id claim_id $ var1 var2 var3;
datalines;
1 gh 11 22 23
2 cd 34 67 43
3 es 29 32 90
;
run;
data work.ds3;
input person_id claim_id $ var1 var2 var3;
datalines;
1 yu 11 22 23
2 uy 34 67 43
3 er 29 32 90
;
run;
%macro setPersonData(personID);
data work.pd&personID / view=work.pd&personID;
set work.ds1 work.ds2 work.ds3;
where person_id = &personID;
run;
%mend setPersonData;
%setPersonData(1);
%setPersonData(2);
%setPersonData(3);
%macro addPersonData(person_id);
write value &person_id;
write open array;
export work.pd&person_id(drop=person_id);
write close;
%mend addPersonData;
%macro createJson(personCount);
proc json out="multiOutput.json" pretty nosastags;
write open object;
write values "person ID";
write open array;
%do personID=1 %to &personCount;
%addPersonData(&personID);
%end;
write close;
write close;
run;
%mend createJson;
%createJson(3);
{
"person ID": [
1,
[
{
"claim_id": "ab",
"var1": 12,
"var2": 23,
"var3": 34
},
{
"claim_id": "cc",
"var1": 34,
"var2": 45,
"var3": 32
},
{
"claim_id": "gh",
"var1": 11,
"var2": 22,
"var3": 23
},
{
"claim_id": "yu",
"var1": 11,
"var2": 22,
"var3": 23
}
],
2,
[
{
"claim_id": "ee",
"var1": 56,
"var2": 32,
"var3": 55
},
{
"claim_id": "cd",
"var1": 34,
"var2": 67,
"var3": 43
},
{
"claim_id": "uy",
"var1": 34,
"var2": 67,
"var3": 43
}
],
3,
[
{
"claim_id": "es",
"var1": 29,
"var2": 32,
"var3": 90
},
{
"claim_id": "er",
"var1": 29,
"var2": 32,
"var3": 90
}
]
]
}
... View more