LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (April 2006, week 5)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:         Sun, 30 Apr 2006 15:34:30 -0500
Reply-To:     Rob Rohrbough <Rob@ROHRBOUGH-SYSTEMS.COM>
Sender:       "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:         Rob Rohrbough <Rob@ROHRBOUGH-SYSTEMS.COM>
Subject:      More theoretical data structure optimization
Comments: cc: "Fehd, Ronald J. (PHPPO" <RJF2@CDC.GOV>
Content-Type: text/plain; charset="us-ascii"

The closest I could come to seeing something about this was a post from Ron Fehd, the "thrifty-thinking maven", of 2/10/05. I would like to store a series binary (not trinary or ternary) values for a record in one variable. I can do this in as little as three bytes numeric or one byte character. I am working in Windows and will confess to not thinking about other platforms. I have the following log:

1 data junk; 2 length bool $1; 3 bool = 0; 4 do i = 0 to 2; 5 bool = bor(bool, blshift(1, i)); 6 end; 7 put bool=; 8 run;

NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column). 3:10 5:12 NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column). 5:16 BOOL=7 NOTE: The data set WORK.JUNK has 1 observations and 2 variables. NOTE: DATA statement used (Total process time): real time 0.01 seconds cpu time 0.01 seconds

Theoretically, each bit can represent one non-exclusive (independent) flag. If I allow the variable, "i", to reach 3, I get, "Invalid character data, 15.00". If I define "bool" as numeric, I eliminate the NOTE's. The absolute miser in me wants to get four on/off values into a single character rather than three. I don't want to waste one or two extra bytes for anything less than nine non-exclusive flags by being forced to use a numeric rather than character variable.

Here are my questions for all you mavens:

1. Is there a way to eliminate the "NOTE"s for a character variable used in this way? I am a log-purist, too.

2. Is there a way of getting rid of that pesky "invalid data" and still use all four bits? In practice, I probably would never develop production code that prints a Boolean variable in this way, but it is nice for debugging.

FWIW, I became ambitious enough to try this after reading, "As an alternative to the numeric dummy variables discussed previously, you can choose a character variable with a length of 1 byte to serve the same purpose.", under the On-line Docs, Base SAS, Operating Environment Specific Information, SAS Companion for Microsoft Windows, Features of the SAS Language for Windows, Length and Precision of Variables under Windows, Character Variables. (Anyone for going back to titles and page numbers?) While I am going a little beyond what they define as "dummy variables" (i.e., Boolean), this is so close to working nicely, my curiosity is piqued.

TIA,

Rob

Rob Rohrbough Omaha, NE, USA


Back to: Top of message | Previous page | Main SAS-L page