Below is the code I'm using now to concatenate (up to) 12 pairs of numeric variables, labeled BP_Systolic 1 -12 and BP_Diastolic 1-12. There is always a pair, no onesies.
length BP_string $84.; /* maximum length with "/" is 83.
BP_string = strip(catx('/',put(BP_SYSTOLIC1,best3.),put(BP_DIASTOLIC1,best3.))) || "," || strip(catx('/',put(BP_SYSTOLIC2,best3.),put(BP_DIASTOLIC2,best3.))) || "," || strip(catx('/',put(BP_SYSTOLIC3,best4.),put(BP_DIASTOLIC3,best3.))) || "," || strip(catx('/',put(BP_SYSTOLIC4,best3.),put(BP_DIASTOLIC4,best3.))) || "," ||
...This goes on for twelve total sets.
What I'd like to do is this:
BP_string = catx("/", of _numeric_);
which is superior then the method above:
Way shorter.
If there only one pair of readings, the result is 120/80,
not 120/80,,,,,,,,, - additional "," for all the missing sets of pairs as in the previous method.
Using BP_string = catx("/", of _numeric_);
results in six pairs of reading as: 120/80/115/75/135/82/140/85/130/84/125/81. That is very good, except I need to replace every 2nd/4th/6th/8th,10th occurrence of "/" with a comma, as below:
120/80,115/75,135/82,140/85,130/84,125/81. Experimenting with some way to use BP_string = catx("/", of _numeric_); to concatenate Systolic1, "/", with it's counterpart Diastolic1, and then Systolic2, "/", with Diastolic2, and so on, until (up to) 12 pairs are read, and then combine them all together separated by a "," - but the below didn't work:
BP_string = catx("/", BP_SYSTOLIC1-12, BP_DIASTOLIC1-12);
It is important if there aren't 12 pairs of readings (or any number more than one pair, but less than 12), there should not be any additional characters.
I do have a variable that stores the number of pairs (readings) for each record in the data set . The average is less then one pair (26% of all observations), but 8 % of the records have the full 12. Pretty certain the answer resides in an array of some kind.
... View more