BookmarkSubscribeRSS Feed
David_Billa
Rhodochrosite | Level 12

Given the following alphanumeric variable VAR1 :

VAR1 = "Is this the real life? Is this just fantasy? Caught in a
landslide. No escape from reality!";

May I know which function yields this excepted results? 

Is this the real life
Is this just fantasy 
Caught in a landslide
No escape from reality
6 REPLIES 6
andreas_lds
Jade | Level 19

Do you really want line breaks in values? Please explain the rules to add line breaks. 

You can try this:

data narf;
   length var1 var2 $ 100;

   VAR1 = "Is this the real life? Is this just fantasy? Caught in a landslide. No escape from reality!";
   var2 = prxchange('s/[[:punct:]]/^n/', -1, var1);
run;

ods escapechar='^';

proc print;run;
David_Billa
Rhodochrosite | Level 12

@andreas_lds Thanks. I need line breaks when there is any special character in the string as I shown in example. Can't we achieve it using scan function or something similar instead of prxchange?

Kurt_Bremser
Super User

You can insert line breaks into the variable by using TRANSLATE:

data want;
VAR1 = "Is this the real life? Is this just fantasy? Caught in a landslide. No escape from reality!";
var1 = translate(var1,'0a0a0a'x,'.!?');
checkvar = put(var1,$hex200.);
put checkvar=;
run;

data _null_;
set want;
file '/folders/myfolders/test.txt';
put var1;
run;

Note that the character used will depend on the environment used to open the file; I use CR because I work on a Mac and inspected the file with TextMate and TextEdit. Since I actually used LF (0A) already, this should be the way to go.

 

You may find that LF (0Ax) is more appropriate for things like Excel.

Also note that SAS will not show the line breaks when viewing the file or creating output (e.g. with PROC PRINT).

andreas_lds
Jade | Level 19

@David_Billa wrote:

@andreas_lds Thanks. I need line breaks when there is any special character in the string as I shown in example. Can't we achieve it using scan function or something similar instead of prxchange?


If you want to code the loop manually, countw+scan could be used, but why? You can, of course, replace [[:punct:]] with "any special char", some need to be escaped with \, like the dot.

Kurt_Bremser
Super User

COUNTW and SCAN, with the proper selection of delimiters:

data want;
VAR1 = "Is this the real life? Is this just fantasy? Caught in a
landslide. No escape from reality!";
do i = 1 to countw(var1,".!?");
  text = scan(var1,i,".!?");
  output;
end;
keep text;
run;

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

Register now!

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
  • 6 replies
  • 1232 views
  • 4 likes
  • 4 in conversation