Professional Documents
Culture Documents
zhushw@em.tsinghua.edu.cn
Delete
Lostcard
Stop
Abort
Where
Output
Remove
Replace
List
Call
Missing
;
Error
if
DATA
SAS
ERROR1LOG
variable=expression;
variable
expression SAS
7.1
LENGTH
7.2
data a;
stocd='0001'; /* 4 */
stocd ='600001'; /*stocd 4 stocd=6000*/
proc print;
run;
7.3 LENGTH
data a;
length stocd 6;
stocd='0001';
stocd ='600001';
proc print;
run;
Length a 4;
X=a;
X8
Length a $4;
X=a;
X4
X=ABC;
X=ABCDEF;
X3
Length a $4 b $6;
X=a||b;
X10
Length a $4;
X=a||CAT;
X=a||CATIP;
X7
Variable+expression;
variable
expression SAS
0
0
A+(-B) +
A-B
7.5 SUMX+X*X X*X SUMX
data a (keep=date uss);
set fdata.r_day;
uss+r600600**2; /*USS r600600 */
run;
7.6
data a(keep=nmis);
set fdata.indcls;
nmis+sector^=' ';
run;
NMIS SECTOR SECTOR
DELETE
DELETE
SAS DATA
DELETE;
7.7
data a;
set fdata.class;
if sex='F' then delete;
run;
FDATA SEX=F
7.8
data a;
set a;
delete;
run;
A
A DELETE
LOSTCARD
LOSTCARD
LOSTCARD SAS
LOSTCARD;
LOSTCARD IF-THEN
LOSTCARD
7.9
data a;
input id 1-3 reject #2 idc 1-3 pass;
if id ne idc then do;
put ' ' id= idc=;
lostcard;
end;
cards;
301 32
301 61432
302 53
302 83171
400 92845
411 46
411 99551
;
proc print;
title2 ' ';
run;
LOSTCARD
SAS
;
DATA ;
INPUT
;
IF SAS
IF SAS
_N_
7.10 3
data a;
input id1 x $ #2 id2 y $ # 3 id3 z $;
if id1 ne id2 or id2 ne id3 then lostcard;
cards;
101 A
102 B
102 B
103 C
103 C
103 C
104 D
105 E
105 E
105 E
;
proc print;
title ' 3 ';
run;
DATA 3 1 1 2
2 1 4 2
3 5
LOG
NOTE: LOST CARD.
RULE: ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0
5
101 A
6
102 B
7
102 B
NOTE: LOST CARD.
8
103 C
NOTE: LOST CARD.
9
103 C
NOTE: LOST CARD.
11
104 D
12
105 E
13
105 E
NOTE: WORK.A 2 6
STOP
STOP DATA STOP
SAS
STOP
7.11 DATA
data B_shares;
infile "d:\fdata\B_shares.txt" firstobs=2 ;
input hstocd $ shrsdt shrout;
format hstocd $8. shrsdt yymmdd10. shrout 16.;
informat hstocd $8. shrsdt yymmdd10. shrout 16.;
if _n_=21 then stop;
proc print; /*OUTPUT */
run;
data B_shares;
infile "d:\fdata\B_shares.txt " firstobs=2 obs=21 ;
input hstocd $ shrsdt shrout;
format hstocd $8. shrsdt yymmdd10. shrout 16.;
informat hstocd $8. shrsdt yymmdd10. shrout 16.;
proc print;
run;
STOP DATA PROC
STOP DATA PROC
ABORT
ABORT DATA DATA
PROC
ABORT ABORT
SAS
:
ABORT<ABEND|RETURN>|<n>;
DATA LOG
OBS=0
SAS
DATA PROC
DATA
ABORT
LOG ABORT DATA
DATA DATA
PROC
ABEND
SAS
RETURN
SAS
LOG , ABORT
RETURN
n
SAS
ABEND RETURN
n n n
7.12 ABORT
data a;
input ssn pay ;
if _error_ then abort;
cards;
111 100
aaa 200
444 300
;
proc print;
run;
_error_ 1 SAS
ssn aaa
SAS _error_ 1 abort
7.13
data a;
do n=3,5,7,4;
set fdata.class point=n;
if _error_=1 then abort;
aaa=_error_;
output;
end;
stop;
run;
WHERE
WHERE
WHERE SET
MERGE UPDATE MODIFY
WHERE SAS
SAS
WHERE IF-THEN
WHERE IF
WHERE
WHERE where-expression;
WHERE
Between-And
Is Missing|Is Null
Contains|?
Like
Same-And
SAMEAND
WHERE candition-1;
[ SAS ]
WHERE SAME AND condition -2
[ SAS ]
WEHERE SAME AND condition-n;
SAS
SAME-AND
7.16 SAME-AND
WHERE
7.17 0
Where x;
Where x and y;
Where x/y;
7.18
Where c^=' ';
where c is not missing;
7.19
Where x between 1 and 5;
where 1<=x<=5;
7.20
Where x in(1, 2, 3, 4, 5);
WHERE IF
DATA WHERE IF WHERE
IF
WHERE IF
WHERE IF SAS
WHERE SAS IF
SAS INPUT
WHERE IF
WHERE IF
SAS WHERE
IF
7.21 WHERE
data a;
set fdata.a000001;
where _n_<1000; /* if */
run;
data a;
set fdata.a000001;
if _n_<1000;
run;
WHERE SAS
OUTPUT
OUTPUT
OUTPUT<data-set-name-1> <data-set-name-n>;
DATA
data-set-name
OUTPUT
SAS
7.22
data A;
input ID $ score1- score3;
drop score1- score3;
score=score1; output;
score=score2; output;
score=score3; output;
cards;
02126 99 96 94
02128 89 90 88
;
proc print;
run;
ID
SCORE.
7.23 DATA
data F M;
set fdata.class;
if sex='F' then output F;
else if sex='M' then output M;
run;
DATA F
SEX F M SEX
F
7.24 DATA
data age1 age2;
input name $ age;
if age <15 then output age1;
else output age2;
cards;
Alice 13
Gail 14
Mary 15
Sandy 11
Philip 16
DATA
Robert 12
AGE1 AGE<15
Thomas 11
AGE2
William 15
AGE>=15
;
run;
7.25
proc sort data=fdata.dd_c;
by date;
data a;
set fdata.dd_c ;
by date;
if first. date then sum_c=0;
sum_c+sum;
keep date sum_c ;
if last.date then output;
run;
1999
first. date
last. date
7.26 MEANS
proc sort data=fdata.dd_c;
by date;
proc means data=fdata.dd_c noprint;
by date;
var sum;
output out=sum sum=sum_c;
run;
REMOVE
REMOVE SAS
REMOVE MODIFY
REMOVE
REMOVE
DELETE IF
MODIFY
REMOVE <data-set-name-1><data-set-name-n>;
DATA
data-set-name
7.27 SAS
data fdata.accounts;
input acctnum credit;
cards;
1001 1500
1002 4900
1003 3000
;
data fdata.Accounts;;
modify fdata.Accounts;
if acctnum=1002 then remove; /* acctnum=1002 */
proc print data= fdata.Accounts;
title'Edited Data Set';
REPLACE
REPLACE
REPLACE MODIFY
REPLACE OUTPUT
REPLACE
OUTPUT
SAS REPLACE
MODIFY OUTPUT
REPLACE<data-set-nme-1><...data-set-name-n>;
data-set-name
7.28
data master;
input name $ id $ phonenum;
cards;
Kevin 1100100 3750066
Sandi 11000001 3756666
Cindy 11000002 6758966
Jim 11000003 6750088
;
data trans;
input name $ id $ phonenum;
cards;
. 1100100 83750066
. 11000001 83756666
Vivan 21000001 83750387
;
data master;
modify master trans;
by id ;
if _iorc_=%sysrc (_sok) then replace; /* master */
else if _iorc_=%sysrc (_dsenmr) then do;
error=0; _iorc_=0;output;
end;
run;
proc print data=master;
title ' MASTER';
run;
TRANS MASTER
MASTER SYSRC MASTER _IORC_
_DSENMR :The TRANSACTION data set observation does not exist in the MASTER data
set.
_SOK :The function was successful.
data master;
input name $ id $ phonenum;
cards;
Kevin 1100100 3750066
Sandi 11000001 3756666
Cindy 11000002 6758966
Jim 11000003 6750088
;
data trans;
input name $ id $ phonenum;
cards;
. 1100100 83750066
. 11000001 83756666
Vivan 21000001 83750387
;
data master;
modify master trans;
by id ;
run;
MISSING
MISSING
MISSING
Missing charcter1charctern;
charcter
7.29
data period_a;
missing X I;
input Id $4. Foodpr1 Foodpr2 Foodpr3 Coffeem1 Coffeem2;
datalines;
1001 115 45 65 I 78
1002 86 27 55 72 86
1004 93 52 X 76 88
1015 73 35 43 112 108
1027 101 127 39 76 79
;
MISSING X I MISSING
X I
LIST, CALL, NULL ERROR.
LIST
LIST SAS
LIST
LIST;
PUT LIST
PUT SAS
PUT LIST
LIST DATA PUT
LIST PUT
LIST PUT
CALL
CALL
Routine
Parameter
CALL
RANBIN(, n, p, )
RANCAN(, )
RANEXP(, )
RANGAM(, , )
RANNOR(, )
RANPOI(, , )
RANTRL(, 1,, n, )
RANTRI(, , )
RANUNI(, )
GAMMA
Poisson
Sound
Symput
System
Lable
Vname
Execute
Call Sound,
Call Symput (, )
Call System()
Call Lable1, 2
Call Vname1, 2
Call Execute
DATA
1 2
12
7.31
data _null_;
call sound(20,800);
/* 20 800*1/80 */
run;
20 20
800*1/80
7.32 DATA
data a;
call symput ('text1', 'march'); /* march text1 */
call symput ('beta', 100); /* 100 beta */
run;
proc reg data=fdata.r_month outest=est noprint;
model r600600=rm;
data est;
set est;
call symput('beta01', intercept); /* DATA
beta01*/
call symput('beta11', rm); /* DATA beta11*/
call symput('sigma1', _rmse_);
run;
7.33
data _null_;
call system('dir *.sas'); /* dir *.sas */
run;
NULL
(;) SAS
CARDS DATALINES
CARDS4
DATALINES4
7.34
data a;
input x y z;
if x=. Then goto find;
list;
find : ;
drop x;
cards;
125
.13
258
.39
;
proc print;
run;
DATA CARDS SAS
SAS ;
PROC PRINT;
ERROR
ERROR _error_ 1
SAS
ERROR <message>;
_ERROR_1
LOG
Message
ERROR
_ERROR_ 1
FILE LOG
PUT
FILE FILE
7.35
data a;
input name $ type $ age ;
if type='teen' & age >19 then error 'type and age don"t macth' age=;
cards;
Wu teen 20
Li teen 12
Cindy adult 28
;
data a;
input name $ type $ age ;
if type='teen' & age >19 then do;
put 'type and age don"t macth' age=;
_error_=1;
end;
cards;
Wu teen 20
Li teen 12
Cindy adult 28
;
run;
ERROR
PUT _ERROR_ FILE