Hello all, My statistical analysis training up until this point has been entirely done in SAS. The code I frequently used was: *Yield Champagin; data yield; set stress; if field='YV' then delete; if field='HB' then delete; if barcode='16187DD4015' then delete; if barcode='16187DD6002' then delete; if barcode='16187DD2007' then delete; if barcode='16187DD5016' then delete; if barcode='16187DD8007' then delete; if barcode='16187DD7010' then delete; if barcode='16187DD7007' then delete; if barcode='16187DD8005' then delete; if barcode='16187DD6004' then delete; if barcode='16187DD5008' then delete; if barcode='16187DD7012' then delete; if barcode='16187DD6010' then delete; run; quit; Title'2016 Asilomar Stress Relief champagin yield'; proc mixed method=reml data=yield; class rep Management Foliar_Fungicide Chemical_Treatment; model Grain_Yield__Mg_h_ =Management|Foliar_Fungicide|Chemical_Treatment Final_Stand__Plants_A_ / outpred=resids residual ddfm=kr; random rep rep*Management rep*Management*Foliar_Fungicide; lsmeans Management|Foliar_Fungicide|Chemical_Treatment / pdiff; ods output diffs=ppp lsmeans=means; ods listing exclude diffs lsmeans; run; quit; %include'C:\Users\harmon12\Desktop\pdmix800.sas'; %pdmix800(ppp,means,alpha=0.10,sort=yes); ods graphics off; run; quit; proc univariate data=resids normal plot; id Barcode Grain_Yield__Mg_h_ pearsonresid; var resid; proc print data=resids (obs=3);run; Can someone please help me convert my code to R? Any help would be much appreciated. Thanks, Andrew Harmon [[alternative HTML version deleted]]
Hello, in my experience the most direct path of converting SAS code to R is by using dplyr. dplyr provides the filter function, the first part of your code could look like this, assuming your datasets are stored as data.frames: library(dplyr) yield <- filter(stress, field != "YV", field != "HV", barcode != "16187DD4015", barcode != "16187DD6002") (and so on for the other barcodes.) For mixed effects look into the lme4 package, lmer should use the reml criterion per default, the model specifications work very different in R. Look into the vingette [1] of the lme4 package chapter 2.1. gives an explanation of the used model formulas. You should get the coeficients of the fitted glmer model with the coef function. The Plots and univariate statistics work very different in R, have a look at the functions group_by and summarise provided by the dplyr package for calculating univariate statistics by groups, and the ggplot 2 package for plotting. Tobi [1] https://cran.r-project.org/web/packages/lme4/vignettes/lmer.pdf On Fri, 2017-09-29 at 07:47 -0500, Andrew Harmon wrote:> Hello all, > > My statistical analysis training up until this point has been entirely done > in SAS. The code I frequently used was: > > *Yield Champagin; > > data yield; > > set stress; > > if field='YV' then delete; > > if field='HB' then delete; > > if barcode='16187DD4015' then delete; > > if barcode='16187DD6002' then delete; > > if barcode='16187DD2007' then delete; > > if barcode='16187DD5016' then delete; > > if barcode='16187DD8007' then delete; > > if barcode='16187DD7010' then delete; > > if barcode='16187DD7007' then delete; > > if barcode='16187DD8005' then delete; > > if barcode='16187DD6004' then delete; > > if barcode='16187DD5008' then delete; > > if barcode='16187DD7012' then delete; > > if barcode='16187DD6010' then delete; > > run; quit; > > > > Title'2016 Asilomar Stress Relief champagin yield'; > > proc mixed method=reml data=yield; > > class rep Management Foliar_Fungicide Chemical_Treatment; > > model Grain_Yield__Mg_h_ =Management|Foliar_Fungicide|Chemical_Treatment > Final_Stand__Plants_A_ / outpred=resids residual ddfm=kr; > > random rep rep*Management rep*Management*Foliar_Fungicide; > > lsmeans Management|Foliar_Fungicide|Chemical_Treatment / pdiff; > > ods output diffs=ppp lsmeans=means; > > ods listing exclude diffs lsmeans; > > run; quit; > > %include'C:\Users\harmon12\Desktop\pdmix800.sas'; > > %pdmix800(ppp,means,alpha=0.10,sort=yes); > > ods graphics off; > > run; quit; > > proc univariate data=resids normal plot; id Barcode Grain_Yield__Mg_h_ > pearsonresid; var resid; > proc print data=resids (obs=3);run; > > Can someone please help me convert my code to R? Any help would be much > appreciated. > > > Thanks, > > > Andrew Harmon > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
You might get better answers if you 1 - break this down into separate issues 2 - tell us what you want to achieve in words rather than SAS, we all read English but few of us speak SAS 3 - post in plain text not HTML as HTML mangles your post On 29/09/2017 13:47, Andrew Harmon wrote:> Hello all, > > My statistical analysis training up until this point has been entirely done > in SAS. The code I frequently used was: > > *Yield Champagin; > > data yield; > > set stress; > > if field='YV' then delete; > > if field='HB' then delete; > > if barcode='16187DD4015' then delete; > > if barcode='16187DD6002' then delete; > > if barcode='16187DD2007' then delete; > > if barcode='16187DD5016' then delete; > > if barcode='16187DD8007' then delete; > > if barcode='16187DD7010' then delete; > > if barcode='16187DD7007' then delete; > > if barcode='16187DD8005' then delete; > > if barcode='16187DD6004' then delete; > > if barcode='16187DD5008' then delete; > > if barcode='16187DD7012' then delete; > > if barcode='16187DD6010' then delete; > > run; quit; > > > > Title'2016 Asilomar Stress Relief champagin yield'; > > proc mixed method=reml data=yield; > > class rep Management Foliar_Fungicide Chemical_Treatment; > > model Grain_Yield__Mg_h_ =Management|Foliar_Fungicide|Chemical_Treatment > Final_Stand__Plants_A_ / outpred=resids residual ddfm=kr; > > random rep rep*Management rep*Management*Foliar_Fungicide; > > lsmeans Management|Foliar_Fungicide|Chemical_Treatment / pdiff; > > ods output diffs=ppp lsmeans=means; > > ods listing exclude diffs lsmeans; > > run; quit; > > %include'C:\Users\harmon12\Desktop\pdmix800.sas'; > > %pdmix800(ppp,means,alpha=0.10,sort=yes); > > ods graphics off; > > run; quit; > > proc univariate data=resids normal plot; id Barcode Grain_Yield__Mg_h_ > pearsonresid; var resid; > proc print data=resids (obs=3);run; > > Can someone please help me convert my code to R? Any help would be much > appreciated. > > > Thanks, > > > Andrew Harmon > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > > --- > This email has been checked for viruses by AVG. > http://www.avg.com > >-- Michael http://www.dewey.myzen.co.uk/home.html
Regarding point 3, as a moderator I have been helping Andrew get this post out to the list over the past week. His previous attempts were encoded in some way that the listserv rejected. He sent me the post via his gmail account and viewing the source I saw it had at least both plain test and HTML an I said it was worth a try to post it. Certainly on my mail client his post displays acceptably with the notice that the HTML alternative was removed. Kevin On 09/29/2017 09:51 AM, Michael Dewey wrote:> You might get better answers if you > > 1 - break this down into separate issues > 2 - tell us what you want to achieve in words rather than SAS, we all > read English but few of us speak SAS > 3 - post in plain text not HTML as HTML mangles your post > > On 29/09/2017 13:47, Andrew Harmon wrote: >> Hello all, >> >> My statistical analysis training up until this point has been >> entirely done >> in SAS. The code I frequently used was: >> >> *Yield Champagin; >> >> data yield; >> >> set stress; >> >> if field='YV' then delete; >> >> if field='HB' then delete; >> >> if barcode='16187DD4015' then delete; >> >> if barcode='16187DD6002' then delete; >> >> if barcode='16187DD2007' then delete; >> >> if barcode='16187DD5016' then delete; >> >> if barcode='16187DD8007' then delete; >> >> if barcode='16187DD7010' then delete; >> >> if barcode='16187DD7007' then delete; >> >> if barcode='16187DD8005' then delete; >> >> if barcode='16187DD6004' then delete; >> >> if barcode='16187DD5008' then delete; >> >> if barcode='16187DD7012' then delete; >> >> if barcode='16187DD6010' then delete; >> >> run; quit; >> >> >> >> Title'2016 Asilomar Stress Relief champagin yield'; >> >> proc mixed method=reml data=yield; >> >> class rep Management Foliar_Fungicide Chemical_Treatment; >> >> model Grain_Yield__Mg_h_ =Management|Foliar_Fungicide|Chemical_Treatment >> Final_Stand__Plants_A_ / outpred=resids residual ddfm=kr; >> >> random rep rep*Management rep*Management*Foliar_Fungicide; >> >> lsmeans Management|Foliar_Fungicide|Chemical_Treatment / pdiff; >> >> ods output diffs=ppp lsmeans=means; >> >> ods listing exclude diffs lsmeans; >> >> run; quit; >> >> %include'C:\Users\harmon12\Desktop\pdmix800.sas'; >> >> %pdmix800(ppp,means,alpha=0.10,sort=yes); >> >> ods graphics off; >> >> run; quit; >> >> proc univariate data=resids normal plot; id Barcode Grain_Yield__Mg_h_ >> pearsonresid; var resid; >> proc print data=resids (obs=3);run; >> >> Can someone please help me convert my code to R? Any help would be much >> appreciated. >> >> >> Thanks, >> >> >> Andrew Harmon >> >> ????[[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> >> --- >> This email has been checked for viruses by AVG. >> http://www.avg.com >> >> >-- Kevin E. Thorpe Head of Biostatistics, Applied Health Research Centre (AHRC) Li Ka Shing Knowledge Institute of St. Michael's Hospital Assistant Professor, Dalla Lana School of Public Health University of Toronto email: kevin.thorpe at utoronto.ca Tel: 416.864.5776 Fax: 416.864.3016
For the initial data step, assuming a data frame named stress already exists, and using base R, you can start with something like this: barcodes.to.delete <- c('16187DD4015', '16187DD6002', {complete the comma-delimited vector of barcodes you don't want} ) yield <- subset(stress, !(barcode %in% barcodes.to.delete) ) yield <- subset(yield , !(field %in% c('YY','HB') ) ## the above three lines could be done in a single line, but it would be long, ugly, hard to read, and hard to validate. ## easier to split it into a few steps ## another way, still using base R, and with a different syntax for the subsetting records.to.drop <- stress$barcode %in% barcodes.to.delete | stress$yield %in% c('YY', 'HB') yield <- stress[ !records.to.drop , ] I think these are examples of doing it "the R way", not thinking in terms of directly translating SAS code to R code. I used to use SAS a lot, but I don't know what the line *Yield Champagin; does. -- Don MacQueen Lawrence Livermore National Laboratory 7000 East Ave., L-627 Livermore, CA 94550 925-423-1062 Lab cell 925-724-7509 On 9/29/17, 5:47 AM, "R-help on behalf of Andrew Harmon" <r-help-bounces at r-project.org on behalf of andrewharmon42 at gmail.com> wrote: Hello all, My statistical analysis training up until this point has been entirely done in SAS. The code I frequently used was: *Yield Champagin; data yield; set stress; if field='YV' then delete; if field='HB' then delete; if barcode='16187DD4015' then delete; if barcode='16187DD6002' then delete; if barcode='16187DD2007' then delete; if barcode='16187DD5016' then delete; if barcode='16187DD8007' then delete; if barcode='16187DD7010' then delete; if barcode='16187DD7007' then delete; if barcode='16187DD8005' then delete; if barcode='16187DD6004' then delete; if barcode='16187DD5008' then delete; if barcode='16187DD7012' then delete; if barcode='16187DD6010' then delete; run; quit; Title'2016 Asilomar Stress Relief champagin yield'; proc mixed method=reml data=yield; class rep Management Foliar_Fungicide Chemical_Treatment; model Grain_Yield__Mg_h_ =Management|Foliar_Fungicide|Chemical_Treatment Final_Stand__Plants_A_ / outpred=resids residual ddfm=kr; random rep rep*Management rep*Management*Foliar_Fungicide; lsmeans Management|Foliar_Fungicide|Chemical_Treatment / pdiff; ods output diffs=ppp lsmeans=means; ods listing exclude diffs lsmeans; run; quit; %include'C:\Users\harmon12\Desktop\pdmix800.sas'; %pdmix800(ppp,means,alpha=0.10,sort=yes); ods graphics off; run; quit; proc univariate data=resids normal plot; id Barcode Grain_Yield__Mg_h_ pearsonresid; var resid; proc print data=resids (obs=3);run; Can someone please help me convert my code to R? Any help would be much appreciated. Thanks, Andrew Harmon [[alternative HTML version deleted]] ______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
> On 29 Sep 2017, at 22:43 , MacQueen, Don <macqueen1 at llnl.gov> wrote: > > I used to use SAS a lot, but I don't know what the line > *Yield Champagin; > does.Nothing. It's a comment... -- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd.mes at cbs.dk Priv: PDalgd at gmail.com