Did you know that you can use a SAS format to up-code text
variables based on a numeric response variable?
The
VVALUE function returns a character value that
is the results of bouncing a numeric
variable’s value against a format. The format for the VVALUE function is:
VVALUE (variable)
Let’s
look at an example:
/* Create potato chip format */
proc format;
value
chiptype
1
= "Ruffles"
2
= "Lay's"
3
= "Kettle"
4
= "Miss Vickies"
5
= "Pringles"
other
= "Don't Know"
;
run;
/* Create example data set */
data class;
set sashelp.class;
Chip_Response = mod(age, 10);
format Chip_Response chiptype.;
run;
/* Upcode value of Chip_Response_Text */
data class_Response;
set class;
length Chip_Response_Text $12.;
Chip_Response_Text = vvalue(Chip_Response);
run;
proc print
noobs data=class_Response;
title1 "Results
of the Potato Chip Question";
var Name Age Chip_Response
Chip_Response_Text;
format Chip_Response 8.;
run;
First we create the CHIPTYPE
format to associate numeric responses with the related potato chip type as per
the questionnaire. The first DATA step
creates the Chip_Response variable
that represents the various subject’s response to the potato chip question in
the survey.
The second DATA step uses the VVALUE
function to assign the correct response text value to Chip_Response_Text,
based on the value found in variable Chip_Response. Since the argument to VVALUE is Chip_Response,
the function looks to the CHIPTYPE
format for the values that should be returned.
It does so because CHIPTYPE
is the format associated with variable Chip_Response.
Chip_Response values of 1 result
in Chip_Response_Text values of “Ruffles”, values of 2 result in “Lay’s”, and
so forth; as per the CHIPTYPE
format.
The output of the PROC PRINT looks like this:
Results
of the Potato Chip Question
Chip_
Chip_ Response_
Name
Age Response Text
Alfred 14 4
Miss Vickies
Alice 13 3
Kettle
Barbara 13 3
Kettle
Carol 14 4
Miss Vickies
Henry 14 4
Miss Vickies
James 12 2
Lay's
Jane 12 2
Lay's
Janet 15 5
Pringles
Jeffrey 13 3
Kettle
John 12 2
Lay's
Joyce 11 1
Ruffles
Judy 14 4
Miss Vickies
Louise 12
2 Lay's
Mary 15 5
Pringles
Philip 16 6
Don't Know
Robert 12 2
Lay's
Ronald 15 5
Pringles
Thomas 11 1
Ruffles
William 15 5
Pringles
Note that if you do not specify a length for a variable
created with the VVALUE function, the variable
length will default to 200 characters.
Ouch!
Best
of luck in all your SAS endeavors!
---MMMMIIIIKKKKEEEE
(aka Michael A. Raithel)
Author of the new cult
classic for computer programmers: It Only Hurts When I
Hit <ENTER>
Print edition: http://tinyurl.com/z8bzx2e
Kindle edition: http://tinyurl.com/zypgqa7
The hack above is an
excerpt from the book: Did
You Know That? Essential Hacks for Clever SAS Programmers
Print edition: http://tinyurl.com/z8bzx2e
Kindle edition: http://tinyurl.com/zypgqa7
No comments:
Post a Comment