SAS Retain 用法

/*  retain*/
/*==============================================================*/
/*Example 1*/
/*==============================================================*/
  DATA WITHOUT_1;
   PUT "Before the INPUT statement:  " _ALL_;
   INPUT X @@;
   PUT "After the INPUT statement:   " _ALL_ /;
DATALINES;
1 2 . 3
;
run;

DATA WITH_1;
   RETAIN X;
   PUT "Before the INPUT statement:  " _ALL_;
   INPUT X @@;
   PUT "After the INPUT statement:   " _ALL_ /;
DATALINES;
1 2 . 3
;
run;

/*==============================================================*/
/*Example 2*/
/*==============================================================*/
/*前一个非缺失值来填补该缺失值*/

DATA WITHOUT_2;
   PUT "Before INPUT:      " _ALL_ ;
   INPUT X @@;
   IF X NE . THEN OLD_X = X;
   ELSE X = OLD_X;
   PUT "After assignment:  " _ALL_ /;
DATALINES;
1 2 . 3
;
run;

DATA WITH_2;
   RETAIN OLD_X;
   PUT "Before INPUT:      " _ALL_ ;
   INPUT X @@;
   IF X NE . THEN OLD_X = X;
   ELSE X = OLD_X;
   PUT "After assignment:  " _ALL_ /;
DATALINES;
1 2 . 3
;
run;
/*==============================================================*/
/*Example 3*/
/*==============================================================*/
/*每个数据加一个顺序的行号*/
DATA WITH_3;
   RETAIN SUBJECT 0;
   PUT "Before the INPUT statement: " _ALL_ ;
   INPUT X @@;
   SUBJECT = SUBJECT + 1;
   PUT "After the INPUT statement: " _ALL_ /;
DATALINES;
1 3 5
;
run;

DATA WITHOUT_4;
PUT "Before the INPUT statement: " _ALL_ ;
INPUT X @@;
SUBJECT  + 1;
 /* SUM statement */
PUT "After the INPUT statement: " _ALL_ /;
DATALINES;
1 3 5 7 9 2 5 6 9
;
run;

/*注意到SUM语句的作用:*/
/*    不需要显示地用“=”赋值*/
/*    不需要显示地初始化SUBJECT,它会自动初始化为0*/
/*    不需要显示地RETAIN,它会自动RETAIN变量*/

DATA USE_n_;
PUT "Before the INPUT statement: " _ALL_ ;
INPUT X @@;
n=_n_;
PUT "After the INPUT statement: " _ALL_ /;
DATALINES;
1 3 5
;
run;

/*==============================================================*/
/*Example 4*/
/*==============================================================*/
DATA ONE;
   INPUT X Y;
DATALINES;
1 2
;
DATA TWO;
   IF _N_ = 1 THEN SET ONE;
   PUT "Before INPUT statement: " _ALL_;
   INPUT NEW;
   PUT "After INPUT statement: " _ALL_ / ;
DATALINES;
3
4
5
;
run;


/*sashelp*/

data test2;
set sashelp.vcolumn;
where libname="WORK"  ;
run;


proc sql;
select nobs,nvar into:nobs,:nvar
from dictionary.tables
where libname="WORK" ;
quit;  

%put &nobs;
%put &nvar;

proc sql;
select nobs,nvar
into:nobs,:nvar
from dictionary.tables
where libname="WORK" and memname="with_3";
quit;

data class1;
set class2;
format _all_;
retain getpost_sumzb;
getpost_sumzb+getpost_zhanbi;
retain sumbytes_sumzb;
sumbytes_sumzb+sumbytes_zhanbi;
chazhi=getpost_sumzb-sumbytes_sumzb;
run;

posted @ 2019-12-26 17:41  虾米WD  阅读(1312)  评论(0)    收藏  举报