Prev: REGULAR EXPRESSIONS
Next: variance component model
From: NordlDJ on 9 Dec 2009 17:34 > -----Original Message----- > From: SAS(r) Discussion [mailto:SAS-L(a)LISTSERV.UGA.EDU] On Behalf Of > White, Svend A. > Sent: Wednesday, December 09, 2009 1:46 PM > To: SAS-L(a)LISTSERV.UGA.EDU > Subject: "write access denied" message > > > > I'm a SAS newbie with a report that needs to create a dataset depending > on the options selected by the user. There are 4 scenarios (i.e., user > choice combinations), but only one of them is working. The other three > throw an error like this: > > > > "ERROR: Write access to member DEVDATA3.SURG_07.DATA is denied. > NOTE: The SAS System stopped processing this step because of errors. > NOTE: SAS set option OBS=0 and will continue to check statements. This > may cause NOTE: No observations in data set. > NOTE: PROCEDURE SORT used (Total process time): > real time 0.01 seconds > cpu time 0.01 seconds" > > > > I've tested the code separately and all 4 of the following code snippets > work fine from the command line: > > #1 (works) proc sort data=surg.surg_06; by UID; run; > data uid06; > set surg.surg_06; by UID; > if first.UID; run; > > > > #2 proc sort data=surg.surg_07; by UID; run; > data uid07; > set surg.surg_07; by UID; > if first.UID; run; > > > > #3proc sort data=surg.surg_06; by pk_event; run; > data pk06; > set surg.surg_06; by pk_event; > if first.pk_event; run; > > > > #4 proc sort data=surg.surg_07; by pk_event; run; > data pk07; > set surg.surg_07; by pk_event; > if first.pk_event; run; > > > If one works, shouldn't they all? > > > > Thanks. > > > > Svend > I think you will need to supply more details/context to get specific advice. The error message suggests that the file is locked for some reason. That could be because your process has it open, or some other process/person has got a lock on the file. There probably other options as well. Dan Daniel J. Nordlund Washington State Department of Social and Health Services Planning, Performance, and Accountability Research and Data Analysis Division Olympia, WA 98504-5204
From: "White, Svend A." on 10 Dec 2009 11:02 > I think you will need to supply more details/context to get specific > advice. The error message suggests that the file is locked for some > reason. That could be because your process has it open, or some other > process/person has got a lock on the file. There probably other > options as well. > > Dan > Thanks for replying, Dan. I realize that my post was vague. I was just keeping it high-level on the first pass in the event there was an obvious quick fix to those with more experience. Re: libnames Someone pointed out to me that the libname in the error message differed from that of the code I included. They are indeed pointing to the same data source (or perhaps two identical data sources; I'm not sure off the top of my head). Re: concurrent users Someone else in my office does occasionally test the webpage in question (which is on an internal server), but 99% of the time I'm the only user. So I guess someone else could have run the page unbeknownst to me and locked up the data, but I'm assuming that would only cause a temporary problem. I agree that the error message sounds like a lockout of some kind, but what I don't understand is why I wouldn't be locked out entirely regardless of the options chosen? If another user has locked up the dataset, why would I be able to run the report for the 1st scenario (i.e., code snippet #1)? Also--and maybe this is just my ignorance--shouldn't a dataset created in WORK on a server expire regularly? Doesn't it expire with the close of the user's session? Anyway, here's the code for the step involved: =================================== [global variables are declared] [filtering options set based on user selections] %local needAnd;%let needAnd=no; %local unitofinterestclause; %local yeartable; /* populate table name variable based on year */ %if %superq(startyear)=2006 %then %do; %let yeartable=surg_06; %end; %else %if %superq(startyear)=2007 %then %do; %let yeartable=surg_07; %end; /* populate SQL sorting option depending on Unit of Interest chosen */ %if %superq(unitofinteresttext)=Patients %then %do; %let unitofinterestclause=UID; %end; %else %if %superq(unitofinteresttext)=Encounters %then %do; %let unitofinterestclause=pk_event; %end; proc sort data=DEVDATA3%str(.)%superq(yeartable); by %superq(unitofinterestclause); /* e.g., proc sort data=DEVDATA3.surg_06; by UID; */ data dischargeSubset; set DEVDATA3%str(.)%superq(yeartable); /* e.g., set DEVDATA3.surg_06; */ by %superq(unitofinterestclause);if first%str(.)%superq(unitofinterestclause); /* e.g., by UID; if first.UID */ [a WHERE clause is added based on user selections] label mdc = "Body Systems"; drg = "Procedure Groups"; keep year count [additional variables are added based on user selections] ; run; =================================== Does this throw any light on the problem? Thanks. Svend > -----Original Message----- > From: SAS(r) Discussion [mailto:SAS-L(a)LISTSERV.UGA.EDU] On Behalf Of > Nordlund, Dan (DSHS/RDA) > Sent: Wednesday, December 09, 2009 4:35 PM > To: SAS-L(a)LISTSERV.UGA.EDU > Subject: Re: "write access denied" message > > > -----Original Message----- > > From: SAS(r) Discussion [mailto:SAS-L(a)LISTSERV.UGA.EDU] On Behalf Of > > White, Svend A. > > Sent: Wednesday, December 09, 2009 1:46 PM > > To: SAS-L(a)LISTSERV.UGA.EDU > > Subject: "write access denied" message > > > > > > > > I'm a SAS newbie with a report that needs to create a dataset > depending > > on the options selected by the user. There are 4 scenarios (i.e., > user > > choice combinations), but only one of them is working. The other > three > > throw an error like this: > > > > > > > > "ERROR: Write access to member DEVDATA3.SURG_07.DATA is denied. > > NOTE: The SAS System stopped processing this step because of errors. > > NOTE: SAS set option OBS=0 and will continue to check statements. > This > > may cause NOTE: No observations in data set. > > NOTE: PROCEDURE SORT used (Total process time): > > real time 0.01 seconds > > cpu time 0.01 seconds" > > > > > > > > I've tested the code separately and all 4 of the following code > snippets > > work fine from the command line: > > > > #1 (works) proc sort data=surg.surg_06; by UID; run; > > data uid06; > > set surg.surg_06; by UID; > > if first.UID; run; > > > > > > > > #2 proc sort data=surg.surg_07; by UID; run; > > data uid07; > > set surg.surg_07; by UID; > > if first.UID; run; > > > > > > > > #3proc sort data=surg.surg_06; by pk_event; run; > > data pk06; > > set surg.surg_06; by pk_event; > > if first.pk_event; run; > > > > > > > > #4 proc sort data=surg.surg_07; by pk_event; run; > > data pk07; > > set surg.surg_07; by pk_event; > > if first.pk_event; run; > > > > > > If one works, shouldn't they all? > > > > > > > > Thanks. > > > > > > > > Svend > > > > I think you will need to supply more details/context to get specific > advice. The error message suggests that the file is locked for some > reason. That could be because your process has it open, or some other > process/person has got a lock on the file. There probably other > options as well. > > Dan > > Daniel J. Nordlund > Washington State Department of Social and Health Services > Planning, Performance, and Accountability > Research and Data Analysis Division > Olympia, WA 98504-5204
From: Charles Harbour on 10 Dec 2009 17:46 Based solely on what you've posted here, it looks like you don't have write access to the permanent dataset that you're writing to, or that you don't have your library properly defined. The short snippets of code you've included have either a one item dataset name (meaning a work file) or a two item name, meaning you're using a libname statement to define where the file is to be written (DEVDATA3.SURG_07.DATA)(ignoring the extension '.data'). Confirm that your library is allocated properly (isn't defined as a code library and you're trying to write data to it; wrong engine, etc.) and that you're able to write to it. Unfortunately, including your macro code reference doesn't really help us debug your code--you've got to turn on the macro printing options (MPRINT, SOURCE2, SYMBOLGEN) and show us the actual, submitted code. HTH, CH On Thu, 10 Dec 2009 10:02:09 -0600, White, Svend A. <SvendW(a)HEALTH.OK.GOV> wrote: >> I think you will need to supply more details/context to get specific >> advice. The error message suggests that the file is locked for some >> reason. That could be because your process has it open, or some other >> process/person has got a lock on the file. There probably other >> options as well. >> >> Dan >> > >Thanks for replying, Dan. > >I realize that my post was vague. I was just keeping it high-level on >the first pass in the event there was an obvious quick fix to those with >more experience. > >Re: libnames >Someone pointed out to me that the libname in the error message differed >from that of the code I included. They are indeed pointing to the same >data source (or perhaps two identical data sources; I'm not sure off the >top of my head). > >Re: concurrent users >Someone else in my office does occasionally test the webpage in question >(which is on an internal server), but 99% of the time I'm the only user. >So I guess someone else could have run the page unbeknownst to me and >locked up the data, but I'm assuming that would only cause a temporary >problem. > >I agree that the error message sounds like a lockout of some kind, but >what I don't understand is why I wouldn't be locked out entirely >regardless of the options chosen? If another user has locked up the >dataset, why would I be able to run the report for the 1st scenario >(i.e., code snippet #1)? > >Also--and maybe this is just my ignorance--shouldn't a dataset created >in WORK on a server expire regularly? Doesn't it expire with the close >of the user's session? > > >Anyway, here's the code for the step involved: > >=================================== >[global variables are declared] > >[filtering options set based on user selections] > > >%local needAnd;%let needAnd=no; >%local unitofinterestclause; %local yeartable; > >/* populate table name variable based on year */ >%if %superq(startyear)=2006 %then %do; %let yeartable=surg_06; >%end; >%else %if %superq(startyear)=2007 %then %do; %let yeartable=surg_07; >%end; > >/* populate SQL sorting option depending on Unit of Interest chosen */ >%if %superq(unitofinteresttext)=Patients %then %do; > %let unitofinterestclause=UID; %end; >%else %if %superq(unitofinteresttext)=Encounters %then %do; > %let unitofinterestclause=pk_event; %end; > >proc sort data=DEVDATA3%str(.)%superq(yeartable); by >%superq(unitofinterestclause); /* e.g., proc sort >data=DEVDATA3.surg_06; by UID; */ >data dischargeSubset; >set DEVDATA3%str(.)%superq(yeartable); >/* e.g., set DEVDATA3.surg_06; */ >by %superq(unitofinterestclause);if >first%str(.)%superq(unitofinterestclause); /* e.g., by UID; >if first.UID */ > >[a WHERE clause is added based on user selections] > >label mdc = "Body Systems"; > drg = "Procedure Groups"; >keep year > count >[additional variables are added based on user selections] > ; >run; > >=================================== > >Does this throw any light on the problem? > >Thanks. > >Svend > > > > >> -----Original Message----- >> From: SAS(r) Discussion [mailto:SAS-L(a)LISTSERV.UGA.EDU] On Behalf Of >> Nordlund, Dan (DSHS/RDA) >> Sent: Wednesday, December 09, 2009 4:35 PM >> To: SAS-L(a)LISTSERV.UGA.EDU >> Subject: Re: "write access denied" message >> >> > -----Original Message----- >> > From: SAS(r) Discussion [mailto:SAS-L(a)LISTSERV.UGA.EDU] On Behalf Of >> > White, Svend A. >> > Sent: Wednesday, December 09, 2009 1:46 PM >> > To: SAS-L(a)LISTSERV.UGA.EDU >> > Subject: "write access denied" message >> > >> > >> > >> > I'm a SAS newbie with a report that needs to create a dataset >> depending >> > on the options selected by the user. There are 4 scenarios (i.e., >> user >> > choice combinations), but only one of them is working. The other >> three >> > throw an error like this: >> > >> > >> > >> > "ERROR: Write access to member DEVDATA3.SURG_07.DATA is denied. >> > NOTE: The SAS System stopped processing this step because of errors. >> > NOTE: SAS set option OBS=0 and will continue to check statements. >> This >> > may cause NOTE: No observations in data set. >> > NOTE: PROCEDURE SORT used (Total process time): >> > real time 0.01 seconds >> > cpu time 0.01 seconds" >> > >> > >> > >> > I've tested the code separately and all 4 of the following code >> snippets >> > work fine from the command line: >> > >> > #1 (works) proc sort data=surg.surg_06; by UID; run; >> > data uid06; >> > set surg.surg_06; by UID; >> > if first.UID; run; >> > >> > >> > >> > #2 proc sort data=surg.surg_07; by UID; run; >> > data uid07; >> > set surg.surg_07; by UID; >> > if first.UID; run; >> > >> > >> > >> > #3proc sort data=surg.surg_06; by pk_event; run; >> > data pk06; >> > set surg.surg_06; by pk_event; >> > if first.pk_event; run; >> > >> > >> > >> > #4 proc sort data=surg.surg_07; by pk_event; run; >> > data pk07; >> > set surg.surg_07; by pk_event; >> > if first.pk_event; run; >> > >> > >> > If one works, shouldn't they all? >> > >> > >> > >> > Thanks. >> > >> > >> > >> > Svend >> > >> >> I think you will need to supply more details/context to get specific >> advice. The error message suggests that the file is locked for some >> reason. That could be because your process has it open, or some other >> process/person has got a lock on the file. There probably other >> options as well. >> >> Dan >> >> Daniel J. Nordlund >> Washington State Department of Social and Health Services >> Planning, Performance, and Accountability >> Research and Data Analysis Division >> Olympia, WA 98504-5204
From: "White, Svend A." on 11 Dec 2009 15:53 Well, I found a work-around: By creating 2 parallel pre-sorted versions of the tables involved I eliminated the need for the PROC SORT that was failing. That's inelegant, but it solves my problem until the IT folks investigate this. Speaking of which, I'm wondering what I should tell our IT guys to investigate. Is this indicative of a particular right being disabled for a particular user group or folder? (Am not sure if I'm using the right terminology/constructs. My server admin experience is all in IIS.) One thing that threw here was how one of the scenarios seemed to work. I guess the PROC SORT wasn't really working in that case, so much as being skipped because the table was already sorted the same way. Does that make sense? Thanks. > -----Original Message----- > From: SAS(r) Discussion [mailto:SAS-L(a)LISTSERV.UGA.EDU] On Behalf Of > Charles Harbour > Sent: Thursday, December 10, 2009 4:46 PM > To: SAS-L(a)LISTSERV.UGA.EDU > Subject: Re: "write access denied" message > > Based solely on what you've posted here, it looks like you don't have > write > access to the permanent dataset that you're writing to, or that you > don't > have your library properly defined. The short snippets of code you've > included have either a one item dataset name (meaning a work file) or a > two > item name, meaning you're using a libname statement to define where the > file > is to be written (DEVDATA3.SURG_07.DATA)(ignoring the extension > '.data'). > Confirm that your library is allocated properly (isn't defined as a > code > library and you're trying to write data to it; wrong engine, etc.) and > that > you're able to write to it. > > Unfortunately, including your macro code reference doesn't really help > us > debug your code--you've got to turn on the macro printing options > (MPRINT, > SOURCE2, SYMBOLGEN) and show us the actual, submitted code. > > HTH, > CH > > On Thu, 10 Dec 2009 10:02:09 -0600, White, Svend A. > <SvendW(a)HEALTH.OK.GOV> > wrote: > > >> I think you will need to supply more details/context to get > specific > >> advice. The error message suggests that the file is locked for some > >> reason. That could be because your process has it open, or some > other > >> process/person has got a lock on the file. There probably other > >> options as well. > >> > >> Dan > >> > > > >Thanks for replying, Dan. > > > >I realize that my post was vague. I was just keeping it high-level on > >the first pass in the event there was an obvious quick fix to those > with > >more experience. > > > >Re: libnames > >Someone pointed out to me that the libname in the error message > differed > >from that of the code I included. They are indeed pointing to the same > >data source (or perhaps two identical data sources; I'm not sure off > the > >top of my head). > > > >Re: concurrent users > >Someone else in my office does occasionally test the webpage in > question > >(which is on an internal server), but 99% of the time I'm the only > user. > >So I guess someone else could have run the page unbeknownst to me and > >locked up the data, but I'm assuming that would only cause a temporary > >problem. > > > >I agree that the error message sounds like a lockout of some kind, but > >what I don't understand is why I wouldn't be locked out entirely > >regardless of the options chosen? If another user has locked up the > >dataset, why would I be able to run the report for the 1st scenario > >(i.e., code snippet #1)? > > > >Also--and maybe this is just my ignorance--shouldn't a dataset created > >in WORK on a server expire regularly? Doesn't it expire with the close > >of the user's session? > > > > > >Anyway, here's the code for the step involved: > > > >=================================== > >[global variables are declared] > > > >[filtering options set based on user selections] > > > > > >%local needAnd;%let needAnd=no; > >%local unitofinterestclause; %local yeartable; > > > >/* populate table name variable based on year */ > >%if %superq(startyear)=2006 %then %do; %let > yeartable=surg_06; > >%end; > >%else %if %superq(startyear)=2007 %then %do; %let > yeartable=surg_07; > >%end; > > > >/* populate SQL sorting option depending on Unit of Interest chosen */ > >%if %superq(unitofinteresttext)=Patients %then %do; > > %let unitofinterestclause=UID; %end; > >%else %if %superq(unitofinteresttext)=Encounters %then %do; > > %let unitofinterestclause=pk_event; %end; > > > >proc sort data=DEVDATA3%str(.)%superq(yeartable); by > >%superq(unitofinterestclause); /* e.g., proc sort > >data=DEVDATA3.surg_06; by UID; */ > >data dischargeSubset; > >set DEVDATA3%str(.)%superq(yeartable); > >/* e.g., set DEVDATA3.surg_06; */ > >by %superq(unitofinterestclause);if > >first%str(.)%superq(unitofinterestclause); /* e.g., by > UID; > >if first.UID */ > > > >[a WHERE clause is added based on user selections] > > > >label mdc = "Body Systems"; > > drg = "Procedure Groups"; > >keep year > > count > >[additional variables are added based on user selections] > > ; > >run; > > > >=================================== > > > >Does this throw any light on the problem? > > > >Thanks. > > > >Svend > > > > > > > > > >> -----Original Message----- > >> From: SAS(r) Discussion [mailto:SAS-L(a)LISTSERV.UGA.EDU] On Behalf Of > >> Nordlund, Dan (DSHS/RDA) > >> Sent: Wednesday, December 09, 2009 4:35 PM > >> To: SAS-L(a)LISTSERV.UGA.EDU > >> Subject: Re: "write access denied" message > >> > >> > -----Original Message----- > >> > From: SAS(r) Discussion [mailto:SAS-L(a)LISTSERV.UGA.EDU] On Behalf > Of > >> > White, Svend A. > >> > Sent: Wednesday, December 09, 2009 1:46 PM > >> > To: SAS-L(a)LISTSERV.UGA.EDU > >> > Subject: "write access denied" message > >> > > >> > > >> > > >> > I'm a SAS newbie with a report that needs to create a dataset > >> depending > >> > on the options selected by the user. There are 4 scenarios (i.e., > >> user > >> > choice combinations), but only one of them is working. The other > >> three > >> > throw an error like this: > >> > > >> > > >> > > >> > "ERROR: Write access to member DEVDATA3.SURG_07.DATA is denied. > >> > NOTE: The SAS System stopped processing this step because of > errors. > >> > NOTE: SAS set option OBS=0 and will continue to check statements. > >> This > >> > may cause NOTE: No observations in data set. > >> > NOTE: PROCEDURE SORT used (Total process time): > >> > real time 0.01 seconds > >> > cpu time 0.01 seconds" > >> > > >> > > >> > > >> > I've tested the code separately and all 4 of the following code > >> snippets > >> > work fine from the command line: > >> > > >> > #1 (works) proc sort data=surg.surg_06; by UID; run; > >> > data uid06; > >> > set surg.surg_06; by UID; > >> > if first.UID; run; > >> > > >> > > >> > > >> > #2 proc sort data=surg.surg_07; by UID; run; > >> > data uid07; > >> > set surg.surg_07; by UID; > >> > if first.UID; run; > >> > > >> > > >> > > >> > #3proc sort data=surg.surg_06; by pk_event; run; > >> > data pk06; > >> > set surg.surg_06; by pk_event; > >> > if first.pk_event; run; > >> > > >> > > >> > > >> > #4 proc sort data=surg.surg_07; by pk_event; run; > >> > data pk07; > >> > set surg.surg_07; by pk_event; > >> > if first.pk_event; run; > >> > > >> > > >> > If one works, shouldn't they all? > >> > > >> > > >> > > >> > Thanks. > >> > > >> > > >> > > >> > Svend > >> > > >> > >> I think you will need to supply more details/context to get > specific > >> advice. The error message suggests that the file is locked for some > >> reason. That could be because your process has it open, or some > other > >> process/person has got a lock on the file. There probably other > >> options as well. > >> > >> Dan > >> > >> Daniel J. Nordlund > >> Washington State Department of Social and Health Services > >> Planning, Performance, and Accountability > >> Research and Data Analysis Division > >> Olympia, WA 98504-5204
From: Michael Raithel on 16 Dec 2009 13:49
Dear SAS-L-ers, One week ago to the day, Svend A. White posted the following: > I'm a SAS newbie with a report that needs to create a dataset depending > on the options selected by the user. There are 4 scenarios (i.e., user > choice combinations), but only one of them is working. The other three > throw an error like this: > > "ERROR: Write access to member DEVDATA3.SURG_07.DATA is denied. > NOTE: The SAS System stopped processing this step because of errors. > NOTE: SAS set option OBS=0 and will continue to check statements. This > may cause NOTE: No observations in data set. > NOTE: PROCEDURE SORT used (Total process time): > real time 0.01 seconds > cpu time 0.01 seconds" > > I've tested the code separately and all 4 of the following code > snippets > work fine from the command line: > > #1 (works) proc sort data=surg.surg_06; by UID; run; > data uid06; > set surg.surg_06; by UID; > if first.UID; run; > > > > #2 proc sort data=surg.surg_07; by UID; run; > data uid07; > set surg.surg_07; by UID; > if first.UID; run; > > #3proc sort data=surg.surg_06; by pk_event; run; > data pk06; > set surg.surg_06; by pk_event; > if first.pk_event; run; > > #4 proc sort data=surg.surg_07; by pk_event; run; > data pk07; > set surg.surg_07; by pk_event; > if first.pk_event; run; > > If one works, shouldn't they all? > Svend, I see that Dan and Charles both svent you some great advice, and I see that by last Friday, you had a workaround. Good deal; you got over the hump on this issue! But, it must be less than satisfying to have a workaround instead of a solution. So, here are some thoughts that may, or may not, overlap some of the ideas put forth by aforementioned esteemed SAS-L-ers, but are designed to see if you can overcome this problem. 1. Make sure that you don't already have the data set open in a SAS Display Manager session. Also make sure that somebody else doesn't have the data set open for update. 2. Make sure that you do not have the NOREPLACE system option in effect. <--Not likely in your case. 3. Make sure that you do not have the ACCESS=READONLY option in effect for the SAS data library. <--Not likely in your case. 4. See if some sneaky somebody has password protected the data set using SAS. Execute a PROC CONTENTS on the offending SAS data sets and look for the value of "Protection" in the Attributes (1st ) section of the CONTENTS output. Is it blank, or does it specify something like READ, WRITE, or ALTER? 5. If your offending SAS data sets are on UNIX or Linux, run PROC CONTENTS and see what the "Access Permission" field reads like in the "Engine/Host Dependent Information" (2nd) section of the CONTENTS output. If will have the usual UNIX/Linux permission "mode bits", like "rw-rw-rw- ". Are they consistent with allowing Y-O-U access to the SAS data sets? 6. Ask a friendly Systems Programmer to check out the offending SAS data sets on the server and ask her to determine what is different about the permissions specified on them, versus permissions on the data sets that you can update. 7. You might also want to experiment and see if you can simply read one or more of the offending SAS data sets. We know you cannot update them, but what about simply reading them? Svend, hopefully one or more of these routes will give you insight into the root causes of this vexing problem. Because, you know that it will rear its ugly head when you both least expect it and can least afford for it to happen. Svend, best of luck in all of your SAS endeavors! I hope that this suggestion proves helpful now, and in the future! Of course, all of these opinions and insights are my own, and do not reflect those of my organization or my associates. All SAS code and/or methodologies specified in this posting are for illustrative purposes only and no warranty is stated or implied as to their accuracy or applicability. People deciding to use information in this posting do so at their own risk. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Michael A. Raithel "The man who wrote the book on performance" E-mail: MichaelRaithel(a)westat.com Author: Tuning SAS Applications in the MVS Environment Author: Tuning SAS Applications in the OS/390 and z/OS Environments, Second Edition http://www.sas.com/apps/pubscat/bookdetails.jsp?catid=1&pc=58172 Author: The Complete Guide to SAS Indexes http://www.sas.com/apps/pubscat/bookdetails.jsp?catid=1&pc=60409 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ The only trouble with problems that go away on their own is that They tend to come back on their own. - Anonymous +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |