SAS-函数(三),这几个函数你都知道吗~

2019-10-20 18:47:22 浏览数 (1)

第三部分

昨天最后的一个函数是Lag,那么今天的第一个函数是和昨天的lag很类似,Lag可以将前一条观测下移,然后求差值,那么今天这个函数是可以直接求上下观测的差值...下来看看这段代码...

代码语言:javascript复制
DATA A;
DO I=1 TO 9; 
DIF1=DIF(I);
DIF2=DIF2(I);
DIF3=DIF3(I);
DIF4=DIF4(I);
DIF5=DIF5(I);
DIF6=DIF6(I);
DIF7=DIF7(I);
DIF8=DIF8(I);
DIF9=DIF9(I);
OUTPUT;
END;
RUN;

在来看看结果~

Dif

dif函数就是求上下观测只差,针对数值型变量,一步到位求差~用法和Lag函数一样的...看例子和结果~很简单的..小编就不多说了.

我们写程序或者Macro的时候,经常会对外部是否存在某个文件进行判断,比如我们如果在导入外部数据前,加上一段判断外部文件是否存在的,去做一个debug.这样会让程序变的更加漂亮,日志会更加美观...那么有什么方法可以Check文件的存在与否呢,看过小编历史文章的朋友应该是会记得的...之前小编某篇文章里面是有的..不用回头去看...在列一次

代码语言:javascript复制
/*fileexist:判断一个文件是否存在,如果存在返回1,不存在返回0*/
%macro dde_file_yn(myfilerf);
%local _localhave;
%if %sysfunc(fileexist(&myfilerf)) %then %do;
%put Note:The external file &myfilerf does  exist.;
%let _localhave=1;
%end;
%else %do;
%put Note:The external file &myfilerf does not exist.;
%let _localhave=0;
%end;
&_localhave.
%mend dde_file_yn;

/*exist:判断一个数据集是否存在,如果存在返回1,不存在返回0*/
data _null_;
a='b';
b1=exist('a');
b2=exist('a2');
b3=exist(a);
put b1 b2 b3;
run;

fileexist、exist

上面的黑色代码部分,有一个关于fileexist的应用,注释起来了部分说明了fileexist(判断一个文件是否存在,如果存在返回1,不存在返回0)、exist(判断一个数据集是否存在,如果数据集存在返回1,不存在返回0)的作用...例子小编就不在举了

在编程中,有一些函数可以快速获取数据的属性,比如:观测数,变量个数等等..还是先看一段代码...从功能做切入口

代码语言:javascript复制
/***********************************************
OPEN 打开一个数据集:单独起来暂时感觉没啥用...
CLOSE 关闭open函数打开的数据集:单独起来感觉也没啥用...
ATTRN:获取数据属性:常用语获取观测数目、变量数目....
************************************************/
%LET DSID=%SYSFUNC(OPEN(A));
%LET NOBS=%SYSFUNC(ATTRN(&DSID,NOBS));
%LET NVARS=%SYSFUNC(ATTRN(&DSID,NVARS));
%LET RC= %SYSFUNC(CLOSE(&DSID));
%PUT NOTE:数据集A拥有的观测数目:&NOBS.,变量数目:&NVARS.;

在来看看运行后的Log:

Open、Attrn、Close

就像注释说的:小编还没有体会到这里的open,close还有别的什么用,例子一共是三个函数open、attrn、close,值得一说的就是attrn函数里面的第二个参数,小编这里用了2个(nobs,nvars)这里其实还有很多别的参数..具体可以看SAShelp,当然小编觉得这个例子已经很够用了....

既然刚刚说到I/O相关的函数,那就就顺便在说一个,SAS如何创建文件夹呢,SAS又如何删除文件夹呢~

代码语言:javascript复制
data _null_;
NewDir=dcreate("mydata","D:");
run;/*在D盘下创建一个文件夹,创建mydata的文件夹*/

dcreate

创建文件夹的代码,见上面例子...第一个参数为创建文件夹的名称,第二个参数是新建文件夹所在的路径...那么接下来看看如何用SAS删除文件,函数我也不会,不过我知道X命令怎么写...

代码语言:javascript复制
systask command "rd /s/q D:日常练习sas_func新建文件夹";

在SAS编程中,有一类V开头的函数,不知道你有没有用过,之前见过K开头的函数,那么现在就在来看看V开头的函数,这一类函数是针对SAS数据集的变量进行的,获取当前数据集某变量类型,标签,format的值等等...还是先看看一段代码与结果...

代码语言:javascript复制
PROC DELETE DATA=WORK._ALL_;QUIT;
PROC FORMAT LIBRARY=WORK CNTLOUT=WORK.FMT;
    VALUE TEXT 1='A' 2='B';
  VALUE $ TEXTS  '1'='C' '2'='D';
RUN;
DATA A1;
DO I=1 TO 2;
  DO J=1 TO 2;
    DO M=1 TO 2;
      IF M=1 THEN N='1';
      ELSE N='2';
      /*提取FORMAT的值*/
      VM=VVALUE(M);
      /*利用PUT获得FORMAT的值*/
      VM1=PUT(M,TEXT.);
      /*VTYPE:得到变量的类型*/
      VT1=VTYPE(M);
      VT2=VTYPE(N);
      /*********************************
      VNAME:得的变量的名称
      VLABEL:得到变量的标签
      VLENGTH:得到变量的长度
      *******************************/
      M_M=CATX('-',VNAME(I),VLABEL(I),VLENGTH(I));
      OUTPUT;
    END;
  END;
END;
LABEL I="标签1"  J="标签2";
FORMAT M TEXT. N $TEXTS.;
RUN;

运行完后的结果:

vname、vlabel、vlength、vvalue

V系列函数还有几个,不过小编觉得这几个函数就可以了,Vname是得到变量的名称...这个函数是最鸡肋的吧,你肯定是先知道了变量名称,在去获取变量名称感觉没啥意义...也可能是小编理解不到位

感觉最实在的也就是Vvalue,小编最开始不知道这个函数的时候,都是用put(var,format.)去得到format的值...其他几个函数具体啥意思可以看上面代码注释部分,或者SAShelp....

基础的函数大概就这么多了,近期是没有函数(四)的,还没有写的函数大概剩下日期相关的,随机相关的,数学运算的,正则相关的几类函数了(当然也有宏函数,当然这就不属于基础函数了)...

0 人点赞