SAS 201 - Copy - Copy
SAS 201 - Copy - Copy
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinicdata
sadasdasdasdasdsadasdasdasdasdsadasdasdasdasdclinic.admit2;
/* Data Step */
set clinic.admit;
run;
proc print data=clinic.admit2; /* Procudure Step */
run;
sadasdasdasdasd
proc tabulate data=clinic.admit;
class sex; /* Row */
var heisadasdasdasdasdsadasdasdasdasdsadasdasdasdasdght weight;
/* Column */
table sex*(height weight),mean; /* Cell value */
run;
sadasdasdasdasdsadasdasdasdasd
proc copy in=clinic out=work; /* Copy admit dataset from clinic to work
directory */
select admit;
runsadasdasdasdasdsadasdasdasdasd
35
proc options; /*To list all SAS system options, their settings */
run;
-------
Unlike syntax errors, invalid data errors do not cause SAS to stop processing a
program.
- ** * / + -
& |
and or
TestDate='01jan2000'd;
Time='9:25't;
DateTime='18jan2005:9:27:05'dt
data clinic.stress;
input ID 1-4 Name $ 6-25 RestHr 27-29 MaxHR 31-33
RecHR 35-37 TimeMin 39-40 TimeSec 42-43
Tolerance $ 45;
if tolerance='D';
TotalTime=(timemin*60)+timesec;
datalines;
2458 Murray, W 72 185 128 12 38 D
2462 Almers, C 68 171 133 10 5 I
;
---------
if rate>0 then
Interest=amount*(rate/12);
else put 'DATA ERROR ' rate= _n_=;
Missing numeric values are represented by periods, and missing character values are
represented by blanks.
-------------
proc format lib=library;
value jobfmt
103='manager'
105='text processor'
111='assoc. technical writer'
112='technical writer'
113='senior technical writer';
run;
data perm.empinfo;
infile empdata;
input @9 FirstName $5. @1 LastName $7. +7 JobTitle 3.
@19 Salary comma9.;
format salary comma9.2 jobtitle jobfmt.;
run;
------------
-----------
class will generate single table, but by will generate small tables
-----------
----------------
data clinic.stress;
infile tests;
input ID $ 1-4 Name $ 6-25 RestHR 27-29 MaxHR 31-33
RecHR 35-37 TimeMin 39-40 TimeSec 42-43
Tolerance $ 45;
TotalTime=(timemin*60)+timesec;
retain SumSec 5400;
sumsec+totaltime;
run;
data clinic.stress;
infile tests;
input ID $ 1-4 Name $ 6-25 RestHR 27-29 MaxHR 31-33
RecHR 35-37 TimeMin 39-40 TimeSec 42-43
Tolerance $ 45;
TotalTime=(timemin*60)+timesec;
retain SumSec 5400;
sumsec+totaltime;
if totaltime>800 then TestLength='Long';
run;
In SAS, any numeric value other than 0 or missing is true, and a value of 0 or
missing is false.
if totaltime>800 then
do;
testlength='Long';
message='Run blood panel';
end;
else if 750<=totaltime<=800 then testlength='Normal';
else if totaltime<750 then TestLength='Short';
run;
data payroll;
set salaries;
select(payclass);
when ('monthly') amt=salary;
when ('hourly')
do;
amt=hrlywage*min(hrs,40);
if hrs>40 then put 'CHECK TIMECARD';
end;
otherwise put 'PROBLEM OBSERVATION';
end;
run;
--------------
data lab23.drug1h;
setresearch.cltrials;
run;
data lab23.drug1h(drop=placebo);
set research.cltrials(drop=triglycerides uricacid);
if placebo='YES';
run;
--------------
One-to-one reading : Creates observations that contain all of the variables from
each contributing data set.
Data clinic.one2one;
set clinic.patients;
if age<60;
set clinic.measure;
run;
Interleaving : Intersperses observations from two or more data sets, based on one
or more common variables.
data clinic.interlv;
set clinic.therapy1999 clinic.therapy2000;
by month;
run;
Match-merging : Matches observations from two or more data sets into a single
observation in a new data set according to the values of a common variable.
data clinic.merged;
merge clinic.demog clinic.visit;
by id;
run;
data clinic.merged;
merge clinic.demog(rename=(date=BirthDate))
clinic.visit(rename=(date=VisitDate));
by id;
run;
proc print data=clinic.merged;
run;
data clinic.merged;
merge clinic.demog(in=indemog
rename=(date=BirthDate))
clinic.visit(in=invisit
rename=(date=VisitDate));
by id;
if indemog=1 and invisit=1;
run;
merge clinic.demog(in=indemog
rename=(date=BirthDate))
clinic.visit(drop=weight in=invisit
rename=(date=VisitDate));
----------
mean(of x1-x3)
Test=input(saletest,comma9.);
INPUT(source,informat)
PUT(source,format)
data hrd.newtemp;
set hrd.temp;
Assignment=put(site,2.)||'/'||dept;
run;
January 1, 1960
date=mdy(mon,day,yr);
now=today();
now=date();
curtime=time();
day=day(date);
quarter=qtr(date);
wkday=weekday(date);
month=month(date);
yr=year(date);
x=intck('day',d1,d2);
x=intck('week',d1,d2);
x=intck('month',d1,d2);
x=intck('qtr',d1,d2);
x=intck('year',d1, d2);
x=intnx('interval',start- from,increment);
x=datdif('date1',date2, ACT/ACT);
x=yrdif('date1',date2, ACT/ACT);
Years=intck('year',hired,today());
TargetYear=intnx('year','05feb94'd,3);
MonthX=intnx('month','01jan95'd,5,'b');
DATDIF(start_date,end_date,basis)
YRDIF(start_date,end_date,basis)
Years=intck('year',hired,today());
TargetYear=intnx('year','05feb94'd,3);
MonthX=intnx('month','01jan95'd,5,'b');
SCAN(argument,n,delimiters)
LastName=scan(name,1)
SUBSTR(argument,position,<n>)
substr(middlename,1,1)
data hrd.datapool;
set hrd.temp;
if index(job,'word processing') > 0; search word processing in column job
run;
index(upcase(job),'WORD PROCESSING')
index(lowcase(job),'word processing')
data hrd.datapool;
set hrd.temp;
if find(job,'word processing','t') > 0;
run;
upcase(job)
lowcase(title)
Contact=propcase(contact)
MiddleInitial=substr(scan(name,3),1,1);
Years=intck('year','15jun1999'd,today());
--------------
data finance.earnings;
Amount=1000;
Rate=.075/12;
do month=1 to 12;
Earned+(amount+earned)*(rate);
end;
run;
data work.earn;
Value=2000;
do Year=1 to 20;
Interest=value*.075;
value+interest;
output; explicit output
end;
run;
DO index-variable=5 to 1 by -1;
SAS statements
END;
data work.earn;
do year=1 to 20;
Capital+2000;
do month=1 to 12;
Interest=capital*(.075/12);
capital+interest;
end;
end;
run;
data work.invest;
do until(Capital>=50000);
capital+2000;
capital+capital*.10;
Year+1;
end;
run;
data work.invest;
do while(Capital>=50000);
capital+2000;
capital+capital*.10;
Year+1;
end;
run;
data work.subset;
do sample=10 to 5000 by 10;
set factory.widgets point=sample;
output;
end;
stop;
run;
-------------
A SAS array is a temporary grouping of SAS variables under a single name. An array
exists only for the duration of the DATA step.
data work.report(drop=i);
set master.temps;
array wkday{7} mon tue wed thr fri sat sun;
do i=1 to 7;
wkday{i}=5*(wkday{i}-32)/9;
end;
run;
data work.report(drop=i);
set master.temps;
array wkday{7} mon tue wed thr fri sat sun;
do i=1 to 7;
if wkday{i}>95 then output;
end;
run;
data work.weights(drop=i);
set master.class;
array wt{6} w1-w6;
do i=1 to 6;
wt{i}=wt{i}*2.2;
end;
run;
data work.new(drop=i);
set master.synyms;
array term{9} also1-also9;
do i=1 to 9;
if term{i} ne ' ' then output;
end;
run;
data hrd.convert;
set hrd.fitclass;
array wt{*} weight1-weight6;
do i=1 to dim(wt);
wt{i}=wt{i}*2.2046;
end;
run;
data hrd.diff;
set hrd.convert;
array wt{6} weight1-weight6;
array WgtDiff{5};
do i=1 to 5;
wgtdiff{i}=wt{i+1}-wt{i};
end;
run;
data finance.report;
set finance.qsales;
array sale{4} sales1-sales4;
array Goal{4} (9000 9300 9600 9900);
array Achieved{4};
do i=1 to 4;
achieved{i}=100*sale{i}/goal{i};
end;
run;
data finance.report;
set finance.qsales;
array sale{4} sales1-sales4;
array goal{4} _temporary_ (9000 9300 9600 9900);
array Achieved{4};
do i=1 to 4;
achieved{i}=100*sale{i}/goal{i};
end;
run;
-------------
SAS provides three primary input styles—column input, formatted input, and list
input.
input LastName $7. +1 FirstName $5. +5 Salary comma9. @15 JobTitle 3.;
You can use the notation +(-n) to move the +n pointer control backward.
input @9 FirstName $5. @1 LastName $7. +7 JobTitle 3.; read with length 3
data perm.empinfo;
infile empdata;
input @9 FirstName $5. @1 LastName $7. +7 JobTitle 3.
@19 Salary comma9.;
run;
Two common record formats are fixed-length records and variable-length records.
input Dept $ 1-11 @13 Receipts comma8.;
infile receipts pad;
The PAD option pads each record with blanks so that all data lines have the same
length.
---------------
data perm.survey;
infile credit;
input Gender $ Age Bankcard FreqBank Deptcard
FreqDept;
run;
data perm.survey;
infile credit dlm=',';
input Gender $ Age Bankcard FreqBank
Deptcard FreqDept;
run;
data survey.phone;
infile survey;
input IDnum $ Ques1-Ques5;
run;
data survey.stores;
infile stordata;
input Age (Store1-Store3) ($); Range of character variable
run;
data test.scores;
infile group3;
input Age (Score1-Score4) (6.);
run;
data perm.survey;
infile credit missover; Missing at the end
input Gender $ Age Bankcard FreqBank
Deptcard FreqDept;
run;
data perm.survey;
infile credit dsd;
input Gender $ Age Bankcard FreqBank
Deptcard FreqDept;
run;
data perm.growth;
infile citydata;
length City $ 12; Specify length
input city $ Pop70 Pop80;
run;
The ampersand (&) modifier is used to read character values that contain embedded
blanks.
The colon (:) modifier is used to read nonstandard data values and character values
that are longer than eight characters, but which contain no embedded blanks.
data perm.cityrank;
infile topten;
input Rank City & $12.
Pop86 : comma.;
data _null_;
set perm.finance;
file 'c:\data\findat2' dlm=',';
put ssn name salary date : date9.;
run;
data _null_
set perm.finance;
file 'c:\data\findat2' dlm=',';
put ssn name salary : comma6. date date9.;
run;
data _null_;
set perm.finance;
file 'c:\data\findat2' dsd; value containing commas
put ssn name salary : comma. date : date9.;
run;
data work.finance2;
infile findat2 dsd;
length SSN $ 11 Name $ 9;
input ssn name Salary : comma. Date date9.;
run;
data _null_;
set work.totals;
file totaldat;
put 'Sales for salesrep ' salesrep
'totaled ' sales : dollar9.;
run;
--------------------
A SAS date value is the number of days from January 1, 1960, to the given date.