```Date: Wed, 20 Aug 2008 13:48:11 -0500 Reply-To: syk ghb Sender: "SAS(r) Discussion" From: syk ghb Subject: Re: Improve the code Comments: To: Bucher Scott 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 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