牛骨文教育服务平台(让学习变的简单)
博文笔记

SAS一般语法

创建时间:2015-07-13 投稿人: 浏览次数:575

数据处理

数据部的一般语法:

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;
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。