SAS一般语法

来源:互联网 发布:java list clear 编辑:程序博客网 时间:2024/05/21 22:28

数据处理

数据部的一般语法:

data dataname;set datas;length v1 8. v2 $12. v3 $12.;v1=2;v2='snake';v3="my name is:"||v2; run;proc print;run;

连接字符和字符变量用||。

数据类型转换(input;put)

主要是input把字符转数值,put把数值转字符。sas有自动转化功能但尽量自己定义。

data testin;      input sale $9.;      fmtsale=input(sale,comma9.);      datalines;   /*输出为2,115,353*/

累加累乘(retain)

data mydt;    set dt;    retain sx 0;         sx=sx+x;    run;    /*表示累加,1表示累乘*/

排序(sort,by)

必须先用sort排序,然后用by分组.if 语句如果是代码块则用if ex then do;ex…;end;

data dtname;  set dtname1;proc sort data=dtname;  by v2;run;data dtname2(keep=v2 sum_v1);  set dtname1;  retain sum_v1;  if first.v2 then sum_v1=0;  else sum_v1=sum_v1+v1;  if last.v2;  by v2;run;proc print;run;

分表输出(if,output)

data t1 t2;set tdname;if ex1 then output t1;if ex2 then output t2;run;

条件语句(where,if)

data tt(where=(exp));set et;run;

与下面的输出可能不同,下面语句只循环了子集,上面全部循环后取子集。

data tt;set et;where exp;run;

sas改字符编码(modify)

proc datasets library=libname;       modify tname/correctencoding=utf8;quit;

合并数据集(merge)

合并之前首先要对要合并的数据进行排序,然后用merge来合并。merge table(in=a)in是数据集选项,通过in临时生成一个逻辑变量a,用来决定合并的方式。

proc sort t1;by id;run;proc sort t2;by id;run;data nt;merge t1(in=a) t2(in=b);if a and b;run;

SQL处理

proc sql;create table t as    select a.v1,a.v2,a.id,b.v1,b.id    from t1 as a     left join t2 as b    on a.id=b.id    where ...    group by .    having ...    order by .;    quit;

宏编程要点:区分大小写;in后面不要();

%macro mname(para);    proc print data=tname;        %if exp %then %do;            act1;            act2;        %end;        %else act3run;

宏做循环

%macro mn;data _null_;set tn;call symputx('vn'||left(var),vlabel);run;%do num=1 to n;proc means data=tn sum mean maxdec=2;    where express;    var v1 v2;run;%end;
0 0
原创粉丝点击