SAS一般语法
数据处理
数据部的一般语法:
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 act3
run;
宏做循环
%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;
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。