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 (August 2008, week 3)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:         Wed, 20 Aug 2008 13:48:11 -0500
Reply-To:     syk ghb <sghb02@GMAIL.COM>
Sender:       "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:         syk ghb <sghb02@GMAIL.COM>
Subject:      Re: Improve the code
Comments: To: Bucher Scott <SBucher@schools.nyc.gov>
In-Reply-To:  <98634D42B37B2E4E96CF3A3BD3CD9AE60242587C@EX1VS2.nyced.org>
Content-Type: text/plain; charset=ISO-8859-1

Hi Scott,

Right, it helps great than creating two datasets... but I am getting strange Notes: Forexample, the first NOTE reads: Numeric values have been converted to character values at the places given by: (Line):(Column). 17:9 18:9

even though I am trying to change character to Numeric ??? I thought input is from character to Numeric.

Second, Strange my d2 is trucated 4656 observations to 1565 ????? any reason

Third, I also getrid of the notes for the missing values which is the last NOTE Background: All the q's and p's variables are text. I am converting to Numeric to make algebric operation using 'input' function.

Thank

syk

6 data d2; 7 set d; 8 array q[11] q1 - q9 q83 q84; 9 array p[11] p1 - p9 p83 p84; 10 array F[11] F1 - F9 F83 F84; 11 12 do i = 1 to 11; 13 14 if q[i] = "*" then q[i]=' '; 15 if p[i] = "*" then p[i]=' '; 16 17 q[i] = INPUT(q[i], 1.); 18 p[i] = INPUT(p[i], 1.); 19 20 if q[i] in (0,1,2,3,4,5,6,7) then F[i]=0; 21 else if q[i] in (8,9) then F[i]=q[i]*p[i]; 22 23 end; 24 25 t_FW = sum (of F1 - F9); 26 t_FJ = sum (F83, F84); 27 28 if round(sum( t_FW, t_FJ)) ge 4 then S = 15; 29 else if S = round(9/2*sum(t_FW, tot_FJ),.1); 30 drop i; 31 run; NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column). 17:9 18:9 NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column). 20:12 21:17 21:50 21:59 NOTE: Missing values were generated as a result of performing an operation on missing values. Each place is given by: (Number of times) at (Line):(Column). 8 at 21:58 5 at 25:14 16 at 26:14 5 at 28:8 5 at 28:14 5 at 29:22 5 at 29:32 5 at 29:33 NOTE: There were 4656 observations read from the data set WORK.D. NOTE: The data set WORK.d2 has 1565 observations and 37 variables. NOTE: DATA statement used (Total process time): real time 0.08 seconds cpu time 0.09 seconds

On Wed, Aug 20, 2008 at 1:24 PM, Bucher Scott <SBucher@schools.nyc.gov>wrote:

> Not sure if this is much in the way of an improvement: > > data d2; > set d; > > array q{*} q: ; > array p{*} p: ; > array f{*} f: ; > > do _n_ = 1 to dim(q); > if q[_n_] = "*" then q[_n_]=' '; > if p[_n_] = "*" then p[_n_]=' '; > > q [_n_] = input(q[_n_], 1.); > p [_n_] = input(p[_n_], 1.); > > if q[_n_] in (0,1,2,3,4,5,6,7) then f[_n_]=0; > else if q[_n_] in (8,9) then f[_n_]=q[_n_]*p[_n_]; > end; > > t_fw = sum (of f1 - f9); > t_fj = sum (f23, f24); > if round(sum( t_fw, t_fj)) ge 8 then s = 15; > else if s = round(9/2*sum(t_fw, t_fj),.1); > > run; > > -Scott > > -----Original Message----- > From: SAS(r) Discussion [mailto:SAS-L@LISTSERV.UGA.EDU] On Behalf Of syk > Sent: Wednesday, August 20, 2008 1:21 PM > To: SAS-L@LISTSERV.UGA.EDU > Subject: Improve the code > > Hi All > I just want to make this code more efficient and terse. But, I am not > sure > how?? Especially,I want to collaps the code for d2 and d3. I will also > repeat similar code for other > variables q10-q22 q24-q50 in the same dataset. > > data d > > id q1 q2 q3 q4 q5 q6 q7 q8 q9 q23 q24 p1 p2 p3 p4 p5 p6 p7 p8 p9 p23 > p24 > 1 1 7 8 6 5 8 7 8 5 7 6 2 2 2 2 2 2 2 2 2 2 2 > 2 2 3 8 * 5 8 5 7 8 2 4 4 4 4 4 4 4 4 4 4 > 3 3 8 4 7 2 4 8 8 4 5 3 3 3 3 3 3 3 3 3 3 > 4 4 8 0 2 2 3 1 4 6 2 3 1 1 1 1 1 1 1 1 1 1 1 > .. > > data d2; > set d; > array q[11] q1 - q9 q23 q24; > array p[11] p1 - p9 p23 p24; > > do i = 1 to 11; > if q[i] = "*" then q[i]=' '; > if p[i] = "*" then p[i]=' '; > > end; > > drop i; > run; > > data d3; > set d2; > > array q[11] q1 - q9 q23 q24; > array p[11] p1 - p9 p23 p24; > array F[11] F1 - F9 F23 F24; > > do i = 1 to 11; > > q [i] = INPUT(q[i], 1.); > p [i] = INPUT(p[i], 1.); > > if q[i] in (0,1,2,3,4,5,6,7) then F[i]=0; > > else if q[i] in (8,9) then F[i]=q[i]*p[i]; > > end; > > t_FW = sum (of F1 - F9); > t_FJ = sum (F23, F24); > > if round(sum( t_FW, t_FJ)) ge 8 then S = 15; > else if S = round(9/2*sum(t_FW, t_FJ),.1); > > drop i; > > run; >


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