Skip to content

Instantly share code, notes, and snippets.

@AlyssonJalles
Last active August 29, 2015 14:20
Show Gist options
  • Save AlyssonJalles/76b089ef8af1ed1bffd3 to your computer and use it in GitHub Desktop.
Save AlyssonJalles/76b089ef8af1ed1bffd3 to your computer and use it in GitHub Desktop.
/*==============================================================================================================*/
/* ROUTINE NAME: Mulamba_and_Mock_(1978)_in_SAS.SAS
/* DESCRIPTION: This routine performs Mulamba and Mock (1978) to a multivariate dataset
aiming to select genotypes
/* OBS: ___.
/* AUTHOR: Alysson Jalles da Silva EMAIL: Jalles10@gmail.com
/* LICENCE: MIT
/* VERSION: 1.0 28/10/2014 - Pilot Project
2.0 16/05/2015 - Sum of Mulamba and Mock index automatic
/*==============================================================================================================*/
data VALUE_GEN;
INPUT
GEN NDM PHM LGt AVt MHS YIELD;
label GEN="Genotype"
NDM="Number of days to maturity"
PHM="Plant Height at maturity"
LGt= "Lodging" /*Transformed in SQRT*/ /*Transformado em raiz quadrada*/
AVt="Agronomic Value" /*Transformed in SQRT*/ /*Transformado em raiz quadrada*/
MHS="Mass hundred seeds"
YIELD="Grain Yield (kg/ha)";
cards;
1 127.149 76.3731 1.27405 1.9925 15.1759 2967.63
2 108.652 70.1553 1.47796 2.01625 15.6281 3181.83
3 110.116 67.9069 1.31492 2.10232 14.6352 2986.84
4 114.381 77.2336 1.31492 1.9888 14.6813 2645.72
5 130.423 81.4528 1.16753 2.07857 15.9414 2763.11
6 124.877 79.7596 1.23318 2.03078 17.0003 2083.04
7 119.619 81.0087 1.54277 1.93018 12.6316 3097.04
8 128.459 68.9548 1.09867 1.92067 18.1735 2096.32
9 126.003 74.2635 1.0734 1.81389 18.2589 2505.09
10 126.658 87.6984 1.42144 2.05112 15.4657 2748.18
11 131.078 84.2564 1.17992 2.10602 16.9568 2886.1
13 133.025 81.2585 1.63176 1.83461 13.9677 2208.49
14 134.025 84.3119 1.42144 1.96134 14.7269 2181.65
15 132.551 92.2507 1.69657 1.89902 13.2813 2036.73
16 132.06 81.7304 1.53763 1.90273 14.9139 1998.95
18 120.11 71.1824 1.2635 2.03039 17.6181 3195.61
19 128.623 76.0955 1.38057 1.95183 15.604 2204.9
20 130.423 77.761 1.27405 1.88742 14.4633 2277.13
21 120.274 63.8265 1.16753 1.89902 18.1577 2644.28
22 129.932 83.5624 1.50318 2.02367 18.5523 2679.86
23 132.06 78.5105 1.4435 1.90273 19.4372 2764.92
24 126.167 75.9718 1.42959 1.91253 18.2379 2138.31
25 128.353 73.181 1.17992 1.9888 17.9618 1991.1
26 129.114 77.539 1.31492 1.96134 18.2772 2131.18
27 120.274 69.85 1.0734 2.07857 15.2011 3165.97
28 132.06 88.8642 1.35579 2.07486 14.7967 2518.9
29 119.619 84.5895 1.26166 1.9925 15.4339 2489.73
30 120.929 84.1136 1.17992 2.01996 15.5238 2684.61
31 132.388 91.6678 1.22079 2.04741 13.3976 2939.42
32 129.441 79.9539 1.4435 2.01996 16.9558 2607.02
33 135.825 67.9069 1.0734 2.07486 14.6918 2167.66
34 142.046 80.398 1.16753 2.13348 14.3517 2689.73
36 105.967 82.4799 1.4247 1.98509 12.6133 2834.83
37 115.33 77.0254 1.43709 1.90273 13.2394 2415.38
38 121.093 85.6165 1.12666 2.07486 16.4439 2684.75
39 126.658 81.092 1.0734 2.16093 15.7266 3023.01
40 125.84 76.2343 1.0734 2.10232 15.5867 2491.01
41 120.765 77.65 1.4206 1.98509 14.3088 3516.44
42 122.893 80.4536 1.47796 1.93018 14.8191 3350.71
43 119.947 77.9553 1.55021 1.95764 12.1071 3137.26
44 124.366 77.3447 1.40905 1.93018 14.6897 3353.41
45 134.516 80.8977 1.32731 2.07857 13.0555 2788.02
46 136.48 85.2557 1.22079 2.10602 13.9341 2537.83
47 119.845 77.2051 1.54923 1.8643 15.0742 2912.4
48 124.366 91.0016 1.40263 1.80345 17.4876 2674.32
49 120.438 75.4571 1.39024 1.87157 16.2018 2936.14
50 128.295 92.4658 1.49676 1.96134 12.5373 2528.3
51 120.274 70.091 1.22079 1.92067 13.8409 2365.11
52 103.904 87.0599 1.66725 1.95764 13.4689 2635.63
53 132.329 88.1148 1.0734 2.16093 15.4468 2732.89
54 128.95 77.7888 1.17992 2.07486 17.9204 2944.16
55 106.131 64.2151 1.16753 1.87157 15.2594 2005.4
;
/*GEN NDM HPM LGt AVt MHS YIELD;*/
/*[1] Checking Means*/
/*[1] Checando medias*/
Title "Means of TRAITS";
title height=2 "Medias Gerais dos CARACTERES";
proc means data=VALUE_GEN n mean min max ;
var NDM PHM LGt AVt MHS YIELD;
run;
/*[2] Checking correlations*/
/*[2] Checando correlacoes*/
Title "Phenotypic Correlations of TRAITS";
Title height=2 "Correlacoes fenotipicas dos CARACTERES";
proc corr data=VALUE_GEN noprob nosimple;
var NDM PHM LGt AVt MHS YIELD;
run;
/**************************/
/*[3] Assigning parameters - BEGIN*/
/*[3] Declaracao de Parametros - INICIO*/
/*************************/
/*##############################################################################################*/
/*put after the equals symbol, the name of your data file*/
/*Coloque apos o simbolo de igual o nome do seu banco de dados*/
%let bd=VALUE_GEN;
/*Put here the names of your variables (Bigger is better) you want to INCREASE the means********/
/*Coloque aqui os nomes das suas variaveis (maior e melhor) que voce quer AUMENTAR as medias****/
%let gain=YIELD AVt PHM;
/************************************************************************************************/
/*Put here the name of your variables (Smaller is better) you want to DECREASE the means *******/
/*Coloque aqui o nome de suas variaveis (menor e melhor) que voce quer DIMINUIR as medias*******/
%let lose=NDM LGt MHS;
/************************************************************************************************/
/*Put here your Economic Weights, ordered according to your declared variables*******************/
/*Coloque aqui seus pesos economicos, ordenados de acordo com suas as variaveis declaradas*******/
%let weights=1 1 1 1 1 1;
/************************************************************************************************/
*Put here your heritabilities in (%), ordered according to your declared variables;
*Coloque aqui suas herdabilidades em (%),ordenadas de acordo com suas as variaveis declaradas;
%let heritabilities=30.34 1.29 34.89 62.37 6.85 66.67;
/************************************************************************************************/
/*Put here your (%) percentage of genotype selection*********************************************/
/*Coloque aqui sua (%) porcentagem de selecao de genotipos***************************************/
%let percent_selec=10;
/*##############################################################################################*/
/*[3] Assigning parameters - END*/
/*[3] Declaracao de Parametros - FINAL*/
/*[4]*You DON'T NEED to change this part - BEGIN***/
/*[4]*Voce nao precisa mudar essa parte - INICIO***/
/*###########################################################################################*/
%let n_gain=%sysfunc(countw(&Gain, " "));
%let n_lose=%sysfunc(countw(&Lose, " "));
%let n_weights=%sysfunc(countw(&Weights, " "));
%let n_heritabilities=%sysfunc(countw(&heritabilities, " "));
%let sysyear= %sysfunc(year("&sysdate"d));
options linesize= 179 pagesize= 65; ** landscape **;
footnote6 height=2 color=red "By: Alysson Jalles (&sysyear)";
/***************************************************************/
/*##### MACRO: CALCULATE "IF N_GAIN" AND "N_LOSE" >= ZERO - BEGIN #####*/
/*###### MACRO: CALCULA SE "N_GAIN" E "N_LOSE" >= ZERO - INICIO ######*/
/*ALL*/
%macro n_gain_nlose_zero_or_no;
%if (&n_gain gt 0) and (&n_lose gt 0) %then %do;
/***********************************************************************************************/
/** Assigning rank to traits "BIGGER IS BETTER"
/** Definindo ranque para caracteres "Maior e melhor "
/***********************************************************************************************/
proc rank data=&bd out=RANKING_GAIN ties=dense descending;
var &Gain;
ranks RANK_G_1-RANK_G_&n_gain;
run;
/***********************************************************************************************/
/** Assigning rank to traits "SMALLER IS BETTER"
/** Definindo ranque para caracteres "menor e melhor"
/***********************************************************************************************/
proc rank data=&bd out=RANKING_LOSE ties=dense ;
var &Lose;
ranks RANK_L_1-RANK_L_&n_lose;
run;
/***********************************************************************************************/
/*Merging 'Bigger is better' + 'Smaller is better' and Summing rankings*/
/*Unindo "Maior e melhor" + "Menor e melhor" e somando ranques*/
data GENERAL_RANK;
retain RANK_G_1-RANK_G_&n_gain RANK_L_1-RANK_L_&n_lose;
%let number_var=%eval(&n_gain + &n_lose);
rename RANK_G_1-RANK_G_&n_gain=RANK_VAR_EVAL1-RANK_VAR_EVAL&n_gain;
%let n1=%eval(&n_gain+1);
rename RANK_L_1-RANK_L_&n_lose=RANK_VAR_EVAL&n1-RANK_VAR_EVAL&number_var;
merge RANKING_GAIN RANKING_LOSE;
run;
/*MACRO: Multiplying weights by ranks*/
/*MACRO: Multiplicando pesos por ranques*/
%macro weights_math;
data GENERAL_RANK; set GENERAL_RANK;
%let n=%sysfunc(countw(&Weights));
%do i=1 %to &n;
%let FINAL_WEIGHTS =%scan(&Weights,&i, " ");
RANK_VAR_EVAL&i=(RANK_VAR_EVAL&i)*(&FINAL_WEIGHTS);
%end;
run;
%if &n_weights gt &number_var %then %do;
%put ERROR: "You declared MORE 'weights' than variables"; %put;
%put ERROR: "Você declarou MAIS 'pesos' dos que variáveis"; %put;
%end;
%if &n_weights lt &number_var %then %do;
%put ERROR: "You declared LESS 'weights' than variables"; %put;
%put ERROR: "Você delarou MENOS 'pesos' do que variáveis";%put;
%end;
%mend; %weights_math;
%end;
/*calculating ranks if "N_GAIN"=0*/
/*calculando ranques se "N_GAIN"=0*/
%if &n_gain=0 %then %do;
/***********************************************************************************************/
/** Assigning rank to traits ''SMALLER IS BETTER''
/*Definindo ranque para os caracteres "Menor e melhor"*/
/***********************************************************************************************/
proc rank data=&bd out=RANKING_LOSE ties=dense ;
var &Lose;
ranks RANK_L_1-RANK_L_&n_lose;
run;
/***********************************************************************************************/
/*Renaming ranks 'Smaller is better'*/
/*Renomeando ranques "Menor e melhor "*/
data GENERAL_RANK;
retain RANK_L_1-RANK_L_&n_lose;
%let number_var=&n_lose;
rename RANK_L_1-RANK_L_&n_lose=RANK_VAR_EVAL1-RANK_VAR_EVAL&number_var;
set RANKING_LOSE;
run;
/*MACRO: Warning if you declare more or less weights than variables*/
/*MACRO: Alerta se voce declarar mais ou menos pesos do que variaveis*/
%macro weights_math;
data GENERAL_RANK; set GENERAL_RANK;
%let n=%sysfunc(countw(&Weights));
%do i=1 %to &n;
%let FINAL_WEIGHTS =%scan(&Weights,&i, " ");
RANK_VAR_EVAL&i=(RANK_VAR_EVAL&i)*(&FINAL_WEIGHTS);
%end;
run;
%if &n_weights gt &number_var %then %do;
%put ERROR: "You declared MORE 'weights' than variables"; %put;
%put ERROR: "Você declarou MAIS 'pesos' dos que variáveis";
%end;
%if &n_weights lt &number_var %then %do;
%put ERROR: "You declared LESS 'weights' than variables"; %put;
%put ERROR: "Você delarou MENOS 'pesos' do que variáveis";
%end;
%mend; %weights_math;
%end;
/*calculating ranks if "N_LOSE"=0*/
/*calculando ranques se "N_LOSE"=0*/
%if &n_lose=0 %then %do;
/***********************************************************************************************/
/** Assigning rank to traits ''BIGGER IS BETTER''
/** /*Definindo ranque para os caracteres "Maior e melhor"*/
/***********************************************************************************************/
proc rank data=&bd out=RANKING_GAIN ties=dense descending;
var &Gain;
ranks Rank_G_1-Rank_G_&n_gain;
run;
/***********************************************************************************************/
/*Renaming ranks 'Bigger is better'*/
/*Renomeando ranques "Maior e melhor "*/
data GENERAL_RANK;
retain Rank_G_1-Rank_G_&n_gain;
%let number_var=&n_gain;
rename Rank_G_1-Rank_G_&n_gain=RANK_VAR_EVAL1-RANK_VAR_EVAL&n_gain;
set RANKING_GAIN;
run;
/*MACRO: Warning if you declare more or less weights than variables*/
/*MACRO: Alerta se voce declarar mais ou menos pesos do que variaveis*/
%macro weights_math;
data GENERAL_RANK; set GENERAL_RANK;
%let n=%sysfunc(countw(&Weights));
%do i=1 %to &n;
%let FINAL_WEIGHTS =%scan(&Weights,&i, " ");
RANK_VAR_EVAL&i=(RANK_VAR_EVAL&i)*(&FINAL_WEIGHTS);
%end;
run;
%if &n_weights gt &number_var %then %do;
%put;
%put ERROR: "You declared MORE 'weights' than variables"; %put;
%put ERROR: "Você declarou MAIS 'pesos' dos que variáveis"; %put;
%end;
%if &n_weights lt &number_var %then %do;
%put ERROR: "You declared LESS 'weights' than variables"; %put;
%put ERROR: "Você delarou MENOS 'pesos' do que variáveis";
%put;
%end;
%mend; %weights_math;
%end;
%mend n_gain_nlose_zero_or_no;
%n_gain_nlose_zero_or_no;
/*###### MACRO: CALCULATE IF N_GAIN AND N_LOSE=ZERO - FINAL #####*/
/*### MACRO: CALCULA SE "N_GAIN" E "N_LOSE" >= ZERO - FINAL ###*/
/*Calculating Mulamba and Mock Sum of Ranks*/
/*Calculando Soma de Ranques de Mulamba e Mock*/
data GENERAL_RANK; set GENERAL_RANK;
MULAMBA_AND_MOCK_RANK=sum (of RANK_VAR_EVAL:);
drop RANK_VAR_EVAL:; /*If you want to see the rank of each variable, turn the option "drop" off*/
/*Se voce quer ver o ranque de cada variavel, desligue a opcao "drop"*/
proc sort; by MULAMBA_AND_MOCK_RANK;
data GENERAL_RANK;set GENERAL_RANK;
ID_GENERAL_RANK=_N_; run;
/****************************SHOWING LIST OF SELECTED GENOTYPES**************************************************/
/*************************MOSTRANDO LISTA DE GENOTIPOS SELECIONADOS*******************************************/
*calculating general mean;
*calculando media geral;
%let ALL_V_NM=&Gain &Lose;
data GAIN_LOSE;
retain &ALL_V_NM;
set &bd;
run;
proc means data=GAIN_LOSE mean noprint;
var &ALL_V_NM;
output out=GENER_MEAN (drop=_freq_ _type_) MEAN=;
run;
proc transpose data=GENER_MEAN out=GENER_MEAN (rename=(col1=ORG_MEAN _NAME_=VAR)); run;
data GENER_MEAN;
retain OBS;
set GENER_MEAN;
OBS=_N_;
run;
*subseting dataset according (%) selecion;
*criando banco de dados de acordo com a (%) de selecao;
proc sql noprint;
select count(*) into : nobs
from WORK.GAIN_LOSE;
quit;
data TEMP1;
%let PORC=%sysevalf((&percent_selec*&nobs)/100);
PORCE=round(&PORC); /*rounding selection percentage to the nearest integer value*/
run; /*Arredondando a porcentagem de selecao para o valor inteiro mais proximo*/
proc sql noprint;
select distinct (PORCE) into : PORCE
from WORK.TEMP1;
quit; %let PORCE=%eval(&PORCE);
%put NOTE: "Rounding, Your real (%) selection is &PORCE genotypes!";
%put NOTE: "Arredondando, Sua real (%) de selecao e de &PORCE genotipos!";
data GEN_SELECTED; set GENERAL_RANK (obs=&PORCE); run;
proc print data=GEN_SELECTED;
Title "Genotypes Selected by Mulamba and Mock Method (1978)";
Title2 height=2 "Genotipos selecionados pelo metodo de Mulamba e Mock (1978)";
run;
/*[4]*You DON'T NEED to change this part - END***/
/*[4]*Voce nao precisa mudar essa parte - FINAL***/
/*###########################################################################################*/
/*CALCULATING GAINS WITH HERITABILITIES*/
/*CALCULANDO GANHOS COM HERDABILIDADES*/
/*[5]*You DON'T NEED to change this part - BEGIN***/
/*[5] Voce nao precisa mudar essa parte - INICIO*/
/*###########################################################################################*/
ods html;
ods escapechar='^';
/*dataset selected means*/
*banco de dados das medias selecionadas;
proc means data=GEN_SELECTED mean noprint;
var &ALL_V_NM;
output out=SELEC_MEAN (drop=_freq_ _type_) MEAN=;
run;
proc transpose data=SELEC_MEAN out=SELEC_MEAN (rename=(col1=MEAN_SEL _NAME_=VAR)); run;
data SELEC_MEAN;
retain OBS;
set SELEC_MEAN;
OBS=_N_;
run;
/*Putting h2 into a dataset*/
/*Colocando h2 dentro de um banco de dados*/
%let number_var=%eval(&n_gain+&n_lose); %put &number_var;
DATA TEMP_H2;
DO OBS = 1 TO &number_var;
h= SCAN("&heritabilities.",OBS,'');
OUTPUT;
END;
data TEMP_H2; set TEMP_H2;
h2 = h+0; label h2="h^{super 2} (%)";
drop h;
run;
/*creating a warning to heritability if you declare more or less h2 than variables*/
/*criando alerta para herdabilidade se voce declara mais ou menos h2 do que variaveis*/
%macro warning_heritability;
%if &n_heritabilities gt &number_var %then %do;
%put;
%put ERROR: "You declared MORE 'h2' than variables"; %put;
%put ERROR: "Voce declarou MAIS 'h2' dos que variaveis"; %put;
%end;
%if &n_heritabilities lt &number_var %then %do;
%put ERROR: "You declared LESS 'h2' than variables"; %put;
%put ERROR: "Voce delarou MENOS 'h2' do que variaveis";%put;
%end;
%mend; %warning_heritability;
/*Merging h2 + GENERAL_MEAN + SELEC_MEAN*/
/*Unindo h2 + Media_Geral + Media_Selecionada*/
data FINAL; merge
GENER_MEAN
SELEC_MEAN
TEMP_H2;
rename VAR=TRAIT;
label ORG_MEAN="X^{sub o}" MEAN_SEL="X^{sub s}";
by OBS;
/*Calculating gains*/
/*Calculando ganhos*/
data FINAL; set FINAL;
DS=MEAN_SEL-ORG_MEAN;
GS=DS*(h2/100);
GS_PCT=GS/ORG_MEAN;
label GS_PCT="GS Total (%)"
GS ="GS Total";
format GS_PCT percentn10.2; run;
/*Calculate total gain if "&N_gain" or "&N_lose"=Zero*/
/*Calcula ganho total se "&N_gain" ou "&N_lose"=Zero*/
%macro total_gain;
%if (&n_gain gt 0) and (&n_lose gt 0) %then %do;
DATA TEMP_POSITIVE;
DO OBS = 1 TO &n_gain;
VARP= SCAN("&Gain.",OBS,'');
OUTPUT;
END;
run;
proc sql noprint;
select QUOTE (VARP) into : GAIN2 separated by ', '
from WORK.TEMP_POSITIVE;
quit;
data FINAL; set FINAL;
if TRAIT in (&Gain2.) then do;
GS_GAIN=GS;
GS_PCT_GAIN=GS_PCT;
format GS_PCT_GAIN percentn10.2;end;
else do GS_LOSE=GS;
GS_PCT_LOSE=GS_PCT;
format GS_PCT_LOSE percentn10.2; end;
label GS_GAIN= "GS Total (Gain)"
GS_LOSE= "GS Total (Lose)"
GS_PCT_GAIN="GS Total Gain (%)"
GS_PCT_LOSE="GS Total Lose (%)";
drop OBS;
run;
/*Summing Total Gains*/
/*Somando total de ganhos*/
proc summary data = FINAL;
var GS GS_PCT GS_GAIN GS_LOSE GS_PCT_GAIN GS_PCT_LOSE;
output out=FINAL2 (drop=_type_ _freq_) sum=;
/*merging final dataset*/
/*Unindo banco de dados final*/
data FINAL;
set
FINAL
FINAL2;
if TRAIT=" " then do; TRAIT="TOTAL"; end;
format H2 DS GS GS_GAIN GS_LOSE 10.2;
label TRAIT="TRAIT" _LABEL_="LABEL";
run;
%end;
%if (&n_gain eq 0) or (&n_lose eq 0) %then %do;
data FINAL; merge
GENER_MEAN
SELEC_MEAN
TEMP_H2;
rename VAR=TRAIT;
label ORG_MEAN="X^{sub o}" MEAN_SEL="X^{sub s}" TRAIT="TRAIT";
by OBS;
/*Calculating gains*/
/*Calculando ganhos*/
data FINAL; set FINAL;
DS=MEAN_SEL-ORG_MEAN;
GS=DS*h2;
GS_PCT=GS/ORG_MEAN;
label GS_PCT="GS Total (%)"
GS ="GS Total";
format GS_PCT percentn10.2;
/*Summing Total Gains*/
/*Somando total de ganhos*/
proc summary data = FINAL;
var GS GS_PCT;
output out=FINAL2 (drop=_type_ _freq_) sum=;
/*merging final dataset*/
/*Unindo banco de dados final*/
data FINAL;
set
FINAL
FINAL2;
if TRAIT=" " then do; TRAIT="TOTAL"; end;
drop OBS;
format H2 DS GS 10.2;
label TRAIT="TRAIT" _LABEL_="LABEL";
run;
%end;
%mend; %total_gain;
/*Printing results*/
/*Mostrando resultados*/
Title 'Mulamba and Mock (1978), Index based on the sum of Ranks';
Title2 height=2 "Mulamba and Mock (1978), Indice baseado na soma de Ranks";
footnote1 color=red height=2 "Source: ";
footnote2 justify=left height=1 color=red "1. " color=blue "MULAMBA, N. N.; MOCK, J. J. Improvement of yield potential of the Eto Blanco maize (Zea mays L.) population by breeding for plant traits.
Egyptian Journal of Genetics and Cytology, Alexandria, v. 7, p. 40-57, 1978.";
footnote3 justify=left height=1 color=red "2. " color=blue "CRUZ, C. D.; REGAZZI, A. J.; CARNEIRO, P. C. S. Modelos Biometricos Aplicados ao Melhoramento Genetico. vol. 1. 4. ed. Vicosa, MG: UFV, 2012. 514 p.";
footnote5 color=red height=2 "How to cite";
%let link_MM= https://gist.github.com/AlyssonJalles/76b089ef8af1ed1bffd3;
footnote6 justify=left height=1 color=red "(ABNT)" color=white "__" color=red " 1. " color=blue
"</html>SILVA, A. J. Mulamba and Mock (1978) in SAS, version 2.0. Jaboticabal, SP, Brasil: s.n., 2015. Disponivel em: <</html>"
"<a href=" &link_MM "> https://gist.github.com/AlyssonJalles/76b089ef8af1ed1bffd3 </a>
>. Acesso em: %sysfunc(date(), EURDFDE9.).</html>";
footnote7 justify=left height=1 color=red "(APA 6th) 2. " color=blue
"</html>Silva, A. J. (2015). Mulamba and Mock (1978) in SAS (Version 2.0). Jaboticabal, SP, Brazil. Retrieved from</html>"
"<a href=" &link_MM "> https://gist.github.com/AlyssonJalles/76b089ef8af1ed1bffd3. </a></html>";
footnote8 height=1 color=red "By: Alysson Jalles (&sysyear).";
/*Deleting unnecessary datasets*/
/*Deletando banco de dados desnecessarios*/
proc print data =FINAL noobs label ;
proc delete lib=WORK
data =FINAL2 GAIN_LOSE GENER_MEAN SELEC_MEAN TEMP1 TEMP_H2;
run;
ods html close;
title; footnote;
ODS PREFERENCES;
/*CALCULATING GAINS WITH HERITABILITIES*/
/*[5]*You DON'T NEED to change this part - END***/
/*[5] Voce nao precisa mudar essa parte - FINAL*/
/*###########################################################################################*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment