@alexkim,
I think I would echo @andreas_lds sentiments: This doesn't sound like the best idea. I'll show you how to do it, but I'm not sure that it's a good way to do things.
OK, first let's get some test data. If this test data isn't right, then correct it and post it in a reply. Please remember to use the following buttons in your reply window for code and logs:
Test data:
DATA Person_Data;
INPUT Variable : $25.
Value $
;
datalines;
Person_ID 1
AGE 25
SEX M
HEIGHT 72
Person_ID 2
AGE 8
SEX F
HEIGHT 46
Person_ID 3
AGE 67
SEX M
HEIGHT 68
;
RUN;
OK, so here's code to do what you want:
DATA Concatenated_Person;
DROP Variable
Value;
DROP Person_ID
Age
Sex
Height;
SET Person_Data;
RETAIN Person_ID
Age
Sex
Height
;
IF UPCASE(Variable) = 'PERSON_ID' THEN
DO;
Person_Id = Value;
DELETE;
END;
ELSE
IF UPCASE(Variable) = 'AGE' THEN
DO;
Age = Value;
DELETE;
END;
ELSE
IF UPCASE(Variable) = 'SEX' THEN
DO;
Sex = Value;
DELETE;
END;
ELSE
IF UPCASE(Variable) = 'HEIGHT' THEN
DO;
Height = Value;
Variable_New = CATX(' ','Person_ID=',Person_ID, 'Age=', Age, 'Sex=',Sex, 'Height=',Height);
OUTPUT;
CALL MISSING(Person_ID, Age, Sex, Height);
DELETE;
END;
RUN;
The above code results in:
I might recommend something more along the lines of a program that produces data like this which I think will be a lot more usable:
Here's a program to produce data like the above:
DATA Consolidated_Person;
DROP Variable
Value;
SET Person_Data;
RETAIN Person_ID
Age
Sex
Height
;
IF UPCASE(Variable) = 'PERSON_ID' THEN
DO;
Person_Id = Value;
DELETE;
END;
ELSE
IF UPCASE(Variable) = 'AGE' THEN
DO;
Age = Value;
DELETE;
END;
ELSE
IF UPCASE(Variable) = 'SEX' THEN
DO;
Sex = Value;
DELETE;
END;
ELSE
IF UPCASE(Variable) = 'HEIGHT' THEN
DO;
Height = Value;
OUTPUT;
CALL MISSING(Person_ID, Age, Sex, Height);
DELETE;
END;
RUN;
Jim
... View more