data ex;
input startd endd;
datalnes;
20180312 20180430
;
proc sql;
select startd, endd, input(put(endd,8.),yymmdd8.) - input(put(startd,8.),yymmdd8.)
from ex
;quit;
SAS tips which I keep forgetting :)
data ex;
input startd endd;
datalnes;
20180312 20180430
;
proc sql;
select startd, endd, input(put(endd,8.),yymmdd8.) - input(put(startd,8.),yymmdd8.)
from ex
;quit;
proc ttest data=anorexia (where=(treat in ("Cont","CBT")));
class treat;
var prewt;
run;
/* equal variance */
proc mixed data=anorexia (where=(treat in ("Cont","CBT")));
class treat;
model prewt = treat;
run;
/* unequal variance */
proc mixed data=anorexia (where=(treat in ("Cont","CBT")));
class treat;
model prewt = treat / DDFM=Satterthwaite;
repeated / group=treat;
run;
proc import datafile="C:\projects\Endocrine\CGMS\data\ex\anorexia.csv" out=anorexia
dbms=csv replace; getnames=yes;
run;
proc sql;
create table cbt_long as
select var1 as patient, 0 as time, prewt as y
from anorexia (where=(treat="CBT"))
union
select var1 as patient, 1 as time, postwt as y
from anorexia (where=(treat="CBT"))
;quit;
proc mixed data= cbt_long;
class patient;
model y = time / s;
random patient;
* repeated / subject=patient type=cs rcorr;
run;
/* Paired t-test with SQL */
proc sql;
select t(postwt-prewt) as t, prt(postwt-prewt) as p_value
from anorexia (where=(treat="CBT"))
;quit;
%let ntime=288;
data series (drop=j);
array c(30) ;
array s(30);
do time=1 to &ntime;
do j=1 to 30;
c[j]=cos(2*3.141593*j* time/&ntime); s[j]=sin(2*3.141593*j* time/&ntime);
end;
output;
end;
run;
data illfl (type=corr);
input _type_ $1-4 _name_ $6-13
exercise 15-20 hardy 22-27
fitness 29-34 stress 36-41
illness 43-48;
cards;
n 373 373 373 373 373
mean 40.90 0.00 67.10 4.80 716.7
std 66.50 3.80 18.40 6.70 624.8
corr exercise 1.00
corr hardy -0.03 1.00
corr fitness 0.39 0.07 1.00
corr stress -0.05 -0.23 -0.13 1.00
corr illness -0.08 -0.16 -0.29 0.34 1.00
;;;;
proc calis data=illfl corr;
lineqs
hardy = p1 F1 + e1,
stress = p2 F1 + e2,
illness = p3 F1 + e3,
fitness = p4 F2 + e4,
exercise= p5 F2 + e5;
std
e1-e5 = vare1-vare5,
F1 = 1,
F2 = 1;
cov
F1 F2 = covf1f2;
VAR exercise fitness hardy stress illness;
run;
proc factor data=illfl method=ml scree priors=smc;
var hardy stress illness fitness exercise;
run;
proc factor data=illfl method=ml rotate=v n=2 reorder plot priors=smc;
var hardy stress illness fitness exercise;
run;
data melanoma;
input age $ region $ cases total;
ltotal=log(total);
datalines;
35-44 south 75 220407
45-54 south 68 198119
55-64 south 63 134084
65-74 south 45 70708
75+ south 27 34233
<35 south 64 1074246
35-44 north 76 564535
45-54 north 98 592983
55-64 north 104 450740
65-74 north 63 270908
75+ north 80 161850
<35 north 61 2880262
;
proc genmod data=melanoma order=data;
class age region;
model cases = age region / dist=poisson link=log offset=ltotal;
run;
proc sql;
create table melanoma2 as
select age, region, 1 as resp, cases as count from melanoma union
select age, region, 0 as resp, total-cases as count from melanoma
;quit;
proc genmod data=melanoma2;
weight count;
class age region;
model resp=age region / dist=binomial link=logit;
run;
data bond;
input ingot metal $ pres @@;
datalines;
1 n 67.0 1 i 71.9 1 c 72.2
2 n 67.5 2 i 68.8 2 c 66.4
3 n 76.0 3 i 82.6 3 c 74.5
4 n 72.7 4 i 78.1 4 c 67.3
5 n 73.1 5 i 74.2 5 c 73.2
6 n 65.8 6 i 70.8 6 c 68.7
7 n 75.6 7 i 84.9 7 c 69.0
;
proc mixed data=bond method=reml;
class ingot metal;
model pres=metal;
random ingot;
lsmeans metal / diff=control('n') adjust=dunnett;
run;
/* by simulation */
lsmeans metal / diff=control("n") cl
adjust=simulate(report seed=4943838 cvadjust);
libname ex 'h:\temp';
proc format library=ex;
value sev 1='mile'
2='moderate'
3='severe';
run;
data exemplary;
do variety=1 to 2;
do exposure=1 to 3;
input height @@; output;
end;
end;
datalines; /* expected population means */
14 16 21
10 15 16
run;
proc glmpower data=exemplary;
class variety exposure;
model height=variety|exposure;
contrast "variety" variety 1 -1;
contrast "exp 1 vs 3" exposure 1 0 -1;
contrast "inter" variety*exposure 1 1 1, -1 -1 -1;
power stddev=5
ntotal=60
power=.;
plot x=n min=30 max=90;
run;
# combine strings
data comb_txt;
input id $4. +1 categry $7.;
aa = compress(categry," ,");
n=length(aa);
cat=substr(aa,1,1);
do i=2 to n;
cat=trim(left(cat))||", "||substr(aa,i,1);
end;
cards;
0149 2, 5
0148 7,
0150 8, 5
0151 3, 4, 6
0152