Google SAS Search

Add to Google

Wednesday, December 13, 2006

Cool V9 SAS Compress() Function Tricks

In SAS Version 9 there is a new option available for the compress() function. This new third option allows you to use "modifiers" to modify what compress() is doing. There are too many modifiers to list here, but they are worth looking up in the SAS V9 documentation.

Here is an example of a snippet of code I recently created to get rid of "non-printable" hex chars. This is a pretty standard data cleaning routine and is quite useful when some bad hex chars can creep into your text data. Instead of hunting and pecking for the funky hex chars you can just tell compress() to keep only the
"printable characters".


data _null_;
x = 'A ' '16'x 'bad' '18'x ' sequence, with puncuation?';

put x=;
x = compress(x,,"kw"); * k is for keep, w is for "write-able";
put x=;
run;


Notice in the compress() function there is no second parameter, and there is a new third parameter specified: "kw".
K is for keep, and W is for write-able. So this reads as keep only
a-zA-Zwhitespace0-9punctuation.

Pretty nice, eh?

As I said, there is a bunch of other modifiers available so take a look at the documentation. And happy coding!

Also, there are more examples of using the compress function with the optional third argument at my i-Doc site: http://idoc.pelicanprogramming.com/functions/COMPRESS.html

4 comments:

  1. Hey Stephen,

    I recently started a blog to increase and organize 'sas on unix' skills of my colleagues and general folk.

    I was wondering if you could link me on your blog.
    http://sasonunix.blogspot.com/

    I have done the needful already.

    Thanks,
    M

    ReplyDelete
  2. All is not perfect with compress(), as tech support found out from me yesterday. More at gigabyte-sas.blogspot.com

    ReplyDelete
  3. There are more examples of using the compress function with the optional third argument at my i-Doc site: http://idoc.pelicanprogramming.com/functions/COMPRESS.html

    ReplyDelete
  4. Should/does it say somewhere that the function with a blank second argument doesn't work within PROC SQL?

    ReplyDelete