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.

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

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