[R] conversion from SAS
Frank E Harrell Jr
f.harrell at vanderbilt.edu
Thu Jul 28 16:13:00 CEST 2005
alessandro carletti wrote:
> Hi, I wonder if anybody could help me in converting
> this easy SAS program into R.
> (I'm still trying to do that!)
Converting that program into R will be very feasible and the solution
will be far more elegant than SAS. But I think you are expecting other
people to do your work.
Frank
>
> PROC IMPORT OUT= WORK.CHLA_italian
> DATAFILE= "C:\Documents and
> Settings\carleal\My
> Documents\REBECCA\stat\sas\All&nutrients.xls"
> DBMS=EXCEL2000 REPLACE;
> GETNAMES=YES;
> RUN;
> data chla_italian;
> set chla_italian;
> year=year(datepart(date));
> month=month(datepart(date));
> run;
>
> proc sort data=chla_italian; by station; run;
> /* Check bloom for seasonal cycle outliers */
> data sort_dataset;
> set chla_italian;
> chla=chl_a;
> dayno=date-mdy(1,1,year)+1;
> cos1=cos(2*3.14*dayno/365);
> sin1=sin(2*3.14*dayno/365);
> cos2=cos(4*3.14*dayno/365);
> sin2=sin(4*3.14*dayno/365);
> cos3=cos(6*3.14*dayno/365);
> sin3=sin(6*3.14*dayno/365);
> cos4=cos(8*3.14*dayno/365);
> sin4=sin(8*3.14*dayno/365);
> bloom=0;
> w_chla=1/chla/chla;
> run;
> ODS listing close;
> %macro sort_event(cut_off,last=0);
> /*proc glm data=sort_dataset;
> class year;
> model logchla=year cos1 sin1 cos2 sin2 cos3 sin3
> cos4 sin4 /solution;
> by station;
> where bloom=0;
> output out=chla_res predicted=pred student=studres
> cookd=cookd rstudent=rstudent u95=u95;
> lsmeans year / at (cos1 sin1 cos2 sin2 cos3 sin3
> cos4 sin4)=(0 0 0 0 0 0 0 0);
> ODS output ParameterEstimates=parmest
> LSmeans=lsmeans;
> run;*/
> proc glm data=sort_dataset;
> class year month;
> model chla=/solution;
> by station;
> weight w_chla;
> where bloom=0;
> output out=chla_res predicted=pred student=studres
> cookd=cookd
> daynumber<-data$date-mdy(1,1,y)+1
> rstudent=rstudent ucl=ucl lcl=lcl / alpha=0.02;
> * lsmeans year / at (cos1 sin1)=(0 0);
> * ODS output ParameterEstimates=parmest
> LSmeans=lsmeans;
> run;
> quit;
> data sort_dataset;
> set chla_res;
> increase=ucl-pred;
> if chla>UCL then bloom=1;
> w_chla=1/(50+5*pred*pred);
> %if &last=0 %then %do; drop ucl lcl cookd rstudent
> studres pred; %end;
> run;
> %mend sort_event;
> ODS listing;
> %sort_event(2.0);
> %sort_event(2.0);
> %sort_event(2.0);
> %sort_event(2.0);
> %sort_event(2.0);
> %sort_event(2.0);
> %sort_event(2.0);
> %sort_event(2.0);
> %sort_event(2.0);
> %sort_event(2.0);
> %sort_event(2.0);
> %sort_event(2.0);
> %sort_event(2.0);
> %sort_event(2.0);
> %sort_event(2.0,last=1);
> /* Combine bloom information with all chlorophyll
> values */
> data chla_sep;
> merge sort_dataset(keep=station date bloom pred ucl
> lcl) chla_italian (rename=(chl_a=chla));
> by station date;
> * lcl=exp(lcl);
> * ucl=exp(ucl);
> * pred=exp(pred);
> if bloom=. then bloom=1;
> if bloom=0 then chla1=chla; else chla1=.;
> if bloom=1 then chla2=chla; else chla2=.;
> run;
>
> symbol1 i=none value=plus color=red;
> symbol2 i=none value=plus color=green;
> symbol3 i=join value=none line=1 color=black;
> axis1 logbase=10; axis1;
> proc gplot data=chla_sep;
> plot chla2*date=1 chla1*date=2 (ucl pred
> lcl)*date=3 /overlay vaxis=axis1;
> by station;
> run;
> quit;
> proc glm data=chla_sep;
> class station year month;
> model salinity temperature Transparency__m_
> Nitrate__mmol_l_1_ Phosphate__mmol_l_1_
> Silicate__mmol_l_1_=bloom month/solution;
> by station;
> run;
> quit;
>
> Thanks
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>
--
Frank E Harrell Jr Professor and Chair School of Medicine
Department of Biostatistics Vanderbilt University
More information about the R-help
mailing list