Date: Thu, 16 Dec 2004 17:50:04 -0800
Reply-To: "Pardee, Roy" <pardee.r@GHC.ORG>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: "Pardee, Roy" <pardee.r@GHC.ORG>
Subject: Re: colonoscopy gone awry
Content-Type: text/plain; charset="us-ascii"
[Best subject line ever.]
proc sql ;
* describe table dictionary.columns ;
select name
into :NonRightVars separated by ', '
from dictionary.columns
where upcase(libname) = "MYDATA" and upcase(memname) = "D1" and
upcase(name) not in ('HAND1', 'HAND2', 'GENDER', 'ENERGY', 'MOTION1',
'MOTION2') ;
create table data mydata.fullmat as
select &NonRightVars
, hand1, hand2, gender, energy, motion1, motion2
from mydata.d1 ;
quit ;
HTH,
-Roy
-----Original Message-----
From: SAS(r) Discussion [mailto:SAS-L@LISTSERV.UGA.EDU] On Behalf Of
Michael Murff
Sent: Thursday, December 16, 2004 3:01 PM
To: SAS-L@LISTSERV.UGA.EDU
Subject: colonoscopy gone awry
Hi SAS-L,
Let's say I have a very wide dataset and need to pluck out 5 variables
that are dispersed in various unknown column positions. The program that
I'm going to run (Proc IML) requires that its input matrix be organized
with the extension variables clumped as the rightmost five columns. I
wrote the following code to do the task, but as you can see, a rather
large dataset (500 MB) must be read four times! I am hopping there may
be a more efficient (computing time and code brevity, though the former
is more important) way. I tried to use a retain statement with the colon
modifier, e.g., retain a: b: c: d: e:, where a-e are the first letter of
each group of core variables which must be "left justified." The colon
appears to have no effect, though when I use retain with actual variable
names it does move vars to "leftwise" in the PDV. Can anyone do this
with just one pass (okay, no more than two) through the data? Any
thoughts would be appreciated.
Michael Murff
Provo, UT
data mydata.extensions;
set mydata.d1(keep=hand1 hand2 gender energy motion1 motion2);
run;
data mydata.core;
set mydata.d1(drop=hand1 hand2 gender energy motion1 motion2
id);
run;
data mydata.fullmat;
set mydata.core;
set mydata.extensions;
run;
|