BookmarkSubscribeRSS Feed
Shmuel
Garnet | Level 18

@Phamhhm, it will be nice if you post how did you solve the issue.

Phamhhm
Fluorite | Level 6

Just add ¨Area¨

 

 

 

DATA PHAM.Blabla;

SET PHAM.Bla;

IF area = "ATLANTIC SOUTH AREA" THEN area = 1;

ELSE IF area = "CALIFORNIA NORTH AREA" THEN area = 2;

ELSE IF area = "CENTRAL/SOUTH TEXAS AREA" THEN area = 3;

ELSE IF area = "CHICAGO AREA" THEN area = 4;

ELSE IF area = "DALLAS AREA" THEN area = 5;

ELSE IF area = "DC/MARYLAND/VIRGINIA AREA" THEN area = 6;

ELSE IF area = "GREAT LAKES AREA" THEN area = 7;

ELSE IF area = "HOUSTON AREA" THEN area = 8;

ELSE IF area = "LOS ANGELES AREA" THEN area = 9;

ELSE IF area = "MIDWEST AREA" THEN area = 10;

ELSE IF area = "NEW ENGLAND AREA" THEN area = 11;

ELSE IF area = "NEW YORK CITY AREA" THEN area = 12;

ELSE IF area = "NORTH FLORIDA AREA" THEN area = 13;

ELSE IF area = "NORTHWEST/ROCKY MOUNTAIN AREA" THEN area = 14;

ELSE IF area = "OHIO AREA" THEN area = 15;

ELSE IF area = "PHILADELPHIA AREA" THEN area = 16;

ELSE IF area = "SOUTH FLORIDA AREA" THEN area = 17;

ELSE IF area = "SOUTHWEST AREA" THEN area = 18;

ELSE IF area = "TENNESSEE AREA" THEN area = 19;

ELSE area = .;

RUN;

Reeza
Super User
That will leave notes in your log that will make it difficult to find a true error.
ballardw
Super User

@Phamhhm wrote:

Just add ¨Area¨

 

 

 

DATA PHAM.Blabla;

SET PHAM.Bla;

IF area = "ATLANTIC SOUTH AREA" THEN area = 1;

ELSE IF area = "CALIFORNIA NORTH AREA" THEN area = 2;

ELSE IF area = "CENTRAL/SOUTH TEXAS AREA" THEN area = 3;

ELSE IF area = "CHICAGO AREA" THEN area = 4;

ELSE IF area = "DALLAS AREA" THEN area = 5;

ELSE IF area = "DC/MARYLAND/VIRGINIA AREA" THEN area = 6;

ELSE IF area = "GREAT LAKES AREA" THEN area = 7;

ELSE IF area = "HOUSTON AREA" THEN area = 8;

ELSE IF area = "LOS ANGELES AREA" THEN area = 9;

ELSE IF area = "MIDWEST AREA" THEN area = 10;

ELSE IF area = "NEW ENGLAND AREA" THEN area = 11;

ELSE IF area = "NEW YORK CITY AREA" THEN area = 12;

ELSE IF area = "NORTH FLORIDA AREA" THEN area = 13;

ELSE IF area = "NORTHWEST/ROCKY MOUNTAIN AREA" THEN area = 14;

ELSE IF area = "OHIO AREA" THEN area = 15;

ELSE IF area = "PHILADELPHIA AREA" THEN area = 16;

ELSE IF area = "SOUTH FLORIDA AREA" THEN area = 17;

ELSE IF area = "SOUTHWEST AREA" THEN area = 18;

ELSE IF area = "TENNESSEE AREA" THEN area = 19;

ELSE area = .;

RUN;


So the problem was you wrote code comparing values of a variable that did not exist in your data if this works.

And now you will have notes about conversion to numeric

10   data example;
11      area = "ATLANTIC SOUTH AREA";
12      IF area = "ATLANTIC SOUTH AREA" THEN area = 1;
13   run;

NOTE: Numeric values have been converted to character values at the places given by:
      (Line):(Column).
      12:48

If the whole purpose of this exercise is to display those digits instead of the name text then a format would be my preferred solution as I could switch between the full text and the code value as desired:

 

data example;
   infile datalines dsd truncover;
   informat Area $30.;
   input area $;
datalines;
"ATLANTIC SOUTH AREA"
"CALIFORNIA NORTH AREA"
"CENTRAL/SOUTH TEXAS AREA" 
"CHICAGO AREA"
"DALLAS AREA"
"DC/MARYLAND/VIRGINIA AREA"
"GREAT LAKES AREA"
"HOUSTON AREA"
"LOS ANGELES AREA"
"MIDWEST AREA"
"NEW ENGLAND AREA"
"NEW YORK CITY AREA"
"NORTH FLORIDA AREA"
"NORTHWEST/ROCKY MOUNTAIN AREA"
"OHIO AREA"
"PHILADELPHIA AREA"
"SOUTH FLORIDA AREA"
"SOUTHWEST AREA"
"TENNESSEE AREA"
"Someplaceelse"
 ;
run;
proc format library=work;
value $area
"ATLANTIC SOUTH AREA" = '1'
"CALIFORNIA NORTH AREA"  = '2'
"CENTRAL/SOUTH TEXAS AREA"  = '3'
"CHICAGO AREA"  = '4'
"DALLAS AREA"  = '5'
"DC/MARYLAND/VIRGINIA AREA"  = '6'
"GREAT LAKES AREA"  = '7'
"HOUSTON AREA"  = '8'
"LOS ANGELES AREA"  = '9'
"MIDWEST AREA"  = '10'
"NEW ENGLAND AREA"  = '11'
"NEW YORK CITY AREA"  = '12'
"NORTH FLORIDA AREA"  = '13'
"NORTHWEST/ROCKY MOUNTAIN AREA"  = '14'
"OHIO AREA"  = '15'
"PHILADELPHIA AREA"  = '16'
"SOUTH FLORIDA AREA"  = '17'
"SOUTHWEST AREA"  = '18'
"TENNESSEE AREA"  = '19'
other = ' ' /* place what ever text you want in the quotes*/
;
run;

Proc print data=example;
   var area;
   format area $area.;
run;

Formats become more powerful if you have the value and the codes in a data set as you can make a format from the data set.

 

So instead of adding lots more If/then/else statements to your data code you just change the definition of the format. Also note that the Proc format code more compact than If/then/else.

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 18 replies
  • 1623 views
  • 4 likes
  • 4 in conversation