You are on page 1of 75

7

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

proc sort data=fdata.class;


by sex;
data a;
set fdata.class;
by sex;
n=_N_;
error=_error_;
first_s=first.sex;
last_s=last.sex;
proc print;
run;
x=a+b;
/* x a b */
t(2)=sum(of x1-x5); /* */
a=a+b; /* a b */


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.4 SUM RETAIN


data a (keep=name height s_h);
set fdata.class ;
s_h+height;
proc print;
run;
data b (keep=name height s_h);
set fdata.class ;
s_h=sum(s_h, height, 0);
retain s_h 0;
run;


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

ABORT DATA PROC

DATA DATA
PROC

ABEND
SAS

LOG , ABORT ABEND

RETURN
SAS


LOG , ABORT
RETURN

n
SAS
ABEND RETURN
n n n

abort abend 255;


abort return 255;
RETURN n , SAS
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

7.14 BETWEEN-AND IS MISSING|IS NULL

Where hstocd between 600000 and 600899;


Where taxes between salary*0.30 and salary*0.50;
Where taxes not between salary*0.30 and salary*0.50;
Where idnum is missing; /* */
Where name is null
LIKE
% ;
_
LIKE

7.15 Diana Diane Dianna


Dianthus Dyan. LIKE D
LIKE
Like 'D_an';
/* Dyan */
Like 'D__an_'; /* */
Like 'D_an__'; /* Diana, Diane, Dianna, Dyan */
Like 'D_an%'; /* */
Not like 'D_an%'; /* */

SAMEAND
WHERE candition-1;
[ SAS ]
WHERE SAME AND condition -2
[ SAS ]
WEHERE SAME AND condition-n;
SAS
SAME-AND

7.16 SAME-AND
WHERE

proc gplot data=fdata.a1a0001;


plot clpr*date=1;
where year(date)>1996;
where same and year(date)<2000;
run;
quit;


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;

7.30 INPUT LIST


data a;
input x y;
if x<0 then list;
cards;
26
42
-1 2
-4 6
;
run;

PUT LIST
PUT SAS
PUT LIST
LIST DATA PUT
LIST PUT

LIST PUT

LIST LOG PUT


LIST INPUT PUT

LIST PUT PUT

CALL
CALL

Call routine (parameter-1<parameter-n>);

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

You might also like