Prev: GLIMMIX warning
Next: Why won't SAS fix PROC EXPORT
From: Marc on 24 Mar 2010 17:05 For years I have been thinking and asking, why SAS, even the latest version, doesn't do something to mark/segment/divide different log pieces for different RUNs and with distinctive marks? It's pretty annoying each time to find where is where when debugging the programs, especially for me because there are always so many. I would like to know your opinion. ----Marc
From: Tom Abernathy on 24 Mar 2010 21:32 On Mar 24, 5:05 pm, Marc <morain...(a)gmail.com> wrote: > For years I have been thinking and asking, why SAS, even the latest > version, doesn't do something to mark/segment/divide different log > pieces for different RUNs and with distinctive marks? > It's pretty annoying each time to find where is where when debugging > the programs, especially for me because there are always so many. > > I would like to know your opinion. > > ----Marc I am curious what types of marks you would like? Isn't the code printed in the log distinctive enough for you to detect which commands you are running?
From: Marc on 25 Mar 2010 02:00 On Mar 24, 9:32 pm, Tom Abernathy <tom.aberna...(a)gmail.com> wrote: > On Mar 24, 5:05 pm, Marc <morain...(a)gmail.com> wrote: > > > For years I have been thinking and asking, why SAS, even the latest > > version, doesn't do something to mark/segment/divide different log > > pieces for different RUNs and with distinctive marks? > > It's pretty annoying each time to find where is where when debugging > > the programs, especially for me because there are always so many. > > > I would like to know your opinion. > > > ----Marc > > I am curious what types of marks you would like? Isn't the code > printed in the log distinctive enough for you to detect which commands > you are running? Hi Tom, Thank you so much for answering my post. Well, what I'm saying is: I want it automatically generates some marks, simple ones, like lines, to separate different runs in the log, Not by any of my additional job. I always got thousands lines in the log in one morning's job. If there's some colorful lines or marks...... I've never tried to find ways to work out this. May you help?
From: data _null_; on 25 Mar 2010 08:10 On Mar 25, 1:00 am, Marc <morain...(a)gmail.com> wrote: > On Mar 24, 9:32 pm, Tom Abernathy <tom.aberna...(a)gmail.com> wrote: > > > On Mar 24, 5:05 pm, Marc <morain...(a)gmail.com> wrote: > > > > For years I have been thinking and asking, why SAS, even the latest > > > version, doesn't do something to mark/segment/divide different log > > > pieces for different RUNs and with distinctive marks? > > > It's pretty annoying each time to find where is where when debugging > > > the programs, especially for me because there are always so many. > > > > I would like to know your opinion. > > > > ----Marc > > > I am curious what types of marks you would like? Isn't the code > > printed in the log distinctive enough for you to detect which commands > > you are running? > > Hi Tom, > > Thank you so much for answering my post. > > Well, what I'm saying is: I want it automatically generates some > marks, simple ones, like lines, to separate different runs in the log, > Not by any of my additional job. I always got thousands lines in the > log in one morning's job. > > If there's some colorful lines or marks...... > > I've never tried to find ways to work out this. > > May you help? I usually just DM 'CLEAR LOG'; when it gets too full. You could also PUT a line by adding something like this to the top of the code you submit. skip 40; %put NOTE: %sysfunc(datetime(),datetime20.) %sysfunc(repeat(*,50)); I suppose you could even make a submit "button" that includes clear log or other commands.
From: montura on 25 Mar 2010 10:21
As far as I know, there is no language with native support for that feature. Of course I only know a few language, so I could be wrong. When it comes to SAS, the issue has already been resolved with structured programming. Its easy with SCL objects, I use the following structure.-the code is a bit long, so I cut it off after a few steps. After every step where I code a standard error detect, I throw an error that will stop the entire application, immediately. No cascade of errors. Sometimes, zero observations after a SQL or data step is also an error, there are different detect logic for that. Maybe its time to learn a bit of "computer science and structure" instead of simple commands and options???? class population; public num runSequence / (initialValue=2); public list gSelected / (sendEvent='N', autocreate='N'); public list gMessage / (sendEvent='N', autocreate='N'); public list interface / (initialValue={ 'interface1', 'interface2', 'interface3', 'interface4', 'interface5', 'interface6' }); _init: method / (state='o'); _super(); gSelected=getniteml(envlist('G'), 'selected'); gMessage =getniteml(envlist('G'), 'message'); endmethod; runInterface: method; dcl num xMethod; do xMethod=1 to listlen(interface) while (listlen(gMessage)=0); call send(_self_, getitemc(interface, xMethod)); end; endmethod; interface1: method / (description='Regulated PWSID Population'); submit continue sql; create table systemIndex as select pwsid from libmsis.basic where activity='A' and regby ='S' order by pwsid; quit; endsubmit; if symgetn('sqlrc') then insertc(gMessage, description||' '||_method_, -1); endmethod; interface2: method / (description='Source Population'); submit continue sql; create table sourceIndex as select a.*, b.sourceid, b.srceaval, b.srcecode, b.srcekey from systemIndex a left join libmsis.source b on a.pwsid=b.pwsid where b.srceaval in ('P','I','R','S') order by pwsid, sourceid; quit; endsubmit; if symgetn('sqlrc') then insertc(gMessage, description||' '||_method_, -1); endmethod; interface3: method / (description='Surface Water Treatment Population'); submit continue sql; create table SWtreatedIndex as select distinct pwsid||tpid as trmtKey from libmsis.trmtproc where trmtobj = 'P' and trmtproc in('341','342','343','344','345','346','347') order by trmtKey; quit; endsubmit; if symgetn('sqlrc') then insertc(gMessage, description||' '||_method_, -1); endmethod; |