data temp2; set spg.temp (keep=dept site); Assignment = dept||put(site,2.); run; proc print data=temp2;run;
Hello, just wondering why is there a space inside the concatenated variable?
The space is inside the variable because you specified the format when creating the variable (put(site,2.)). This specifies that the variable should have a length of two, and the space will be included in this length. To remove the space, you can reduce the format to 1. instead of 2.
@ger15xxhcker wrote:
The space is inside the variable because you specified the format when creating the variable (put(site,2.)). This specifies that the variable should have a length of two, and the space will be included in this length. To remove the space, you can reduce the format to 1. instead of 2.
Sorry, but this is completely wrong. The blanks are part of dept and the html-output collapses the blanks automatically. Here is the log-output of an extended version of the program displaying all blanks:
81 data temp2;
82 set sasuser.temp (keep=dept site);
83 dept = translate(dept, '#', ' ');
84 Assignment = dept||put(site,2.);
85 put Assignment=;
86 run;
Assignment=DP###26
Assignment=PURH#57
Assignment=PERS#34
Assignment=BK###57
Assignment=DP###95
Assignment=BK###44
Assignment=DP###59
Assignment=PUB##38
Assignment=DP###44
Assignment=DP###90
SAS only has two types of variables. Floating point numbers and fixed length character strings.
The DEPT variable must be defined as longer than 4 bytes or else there would not be any spaces after the values 'PURH' and 'PERS'.
The ODS output results typically use proportional fonts and other changes that make seeing spaces hard.
If you look at the values using fixed width font then it will be clearer what is going on as the append digits will all appear in the same character position.
If you do not want to include the spaces used to fill out the fixed length variable then modify your code to remove them.
Assignment = trim(dept)||put(site,2.);
Assignment = cats(dept,site);
Also note that if SITE is less than <10 then the PUT() function will also introduce a space. You could use Z2. format instead and get strings like 08. Or use the -L format modifier to left align the digits. So '8 ' instead of ' 8'.
Below two ways how to do this. If using cats() - most people would - make sure that you define the length of the assignment variable beforehand as else it will default to a length of $200.
data sample;
length dept $4 site 8 assignment_1 assignment_1 $6;
dept='ABC';
site=5;
assignment_1=strip(dept)||put(site,2. -l);
assignment_2=cats(dept,put(site,2.));
run;
proc print data=sample;
run;
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
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.
Ready to level-up your skills? Choose your own adventure.