*------------------------------------------------------------------------------------------------* | PROGRAM: elispot.sas | AUTHOR: Michael Hudgens | EMAIL: mhudgens@bios.unc.edu | WEB: http://www.bios.unc.edu/~mhudgens/soft.html | DATE: 1 April 2004 | | | This is an example of how to implement the Westfall and Young | permutation based positive criterion for ELISpot data | | See paper by Hudgens et al in the Journal of Immunological Methods (2004) | | DISCLAIMER: | | THIS INFORMATION IS PROVIDED PROVIDED "AS IS". THERE ARE NO | WARRANTIES, EXPRESSED OR IMPLIED, AS TO MERCHANTABILITY OR | FITNESS FOR A PARTICULAR PURPOSE REGARDING THE ACCURACY OF | THE MATERIALS OR CODE CONTAINED HEREIN. | | *------------------------------------------------------------------------------------------------*; * tailored version of PROC MULTTEST; %macro mymult(data_in=,k=); proc multtest data=&data_in perm n=20000 order=data stepperm; class well; test mean(count/upper); %do peps=1 %to &k; contrast "peptide&peps" -1 %vect(len=&k,place=&peps); %end; %mend mymult; * macro that returns a vector of length len w/ zeros except a 1 at place; %macro vect (len=, place=); %do nn=1 %to &len; %if (&nn^=&place) %then 0; %if (&nn=&place) %then 1; %end; %mend vect; * simple data set done mostly in triplicate w/ k=10 peptide pools; data elispot; length well $9; input well $ count @@; cards; controlwe 10 controlwe 9 controlwe 9 peptide1 10 peptide1 11 peptide1 13 peptide2 52 peptide2 43 peptide2 53 peptide3 43 peptide3 41 peptide3 33 peptide4 44 peptide4 49 peptide4 53 peptide5 35 peptide5 41 peptide5 43 peptide6 36 peptide6 41 peptide6 33 peptide7 26 peptide7 21 peptide7 13 peptide8 27 peptide8 16 peptide8 13 peptide9 18 peptide9 11 peptide10 3 peptide10 4 peptide10 3 ; * call macro; %mymult(data_in=elispot,k=10); run;