#想取出表内第一列数据
proc sort data=case_1 out=case_11;
by name in_Date;
run;
data new_Case_1;
set case_11;
by name;
if first.name;
run;
#根据另一个数据集筛选
proc sort data=case_2;
by name;
run;
proc sort data=case_2_standard;
by name;run;
data new_Case_21;
merge case_2(in =a) case_2_standard(in=b);
by name;
if a and b;
run;
#修改数据集格式
compress(str,chars,modifiers) chars=去除的部分,modifiers保留
substrn(str,start_pos,len)
round(x,unit)#小数位数
input(str,format)#字符型转化成数值型
put()#数值转化成数字
data case_3;
input study_time$ 18.;
cards;
23小时30分钟;
12小时5分钟;
run;
data new_Case_3;
set case_3;
h=copress(substr(study_time,1,2),'','kd');#只保留数字
m=compress(substr(study_time),'','kd');
new_Study_time=round(input(h,8.)+(input(m,8.))/60,0.1);
drop h m;
run;
proc print data=customer;
format zip z5.#设置五位数,不足的填充0
run;
#调整小数位数
proc print data=customer;
format value z5.2#设置五位数(包含小数点以及小数位数),不足的填充0
run;
#日期 character to numeric
data race_new;
set race(rename=(race_Date=old));
date=input(race_date,date9.);
drop old;
format race_Date mmddyy10.;
date
#数字转化成为文本,以此改变位数
data nc_id;
set nc_data;
area_C=put(areacode,3.);
county_c=put(count,z3.);
NC_tag=catx('_',statecode,county_c,area_c)#拼接
run;
查看库内所有的表
data records;
set sashelp.vtable;
where upcase(libname)='LA';
RUN;
DATA COLUMN;
SET SASHELP.VCOLUMN;
WHERE UPCASE(LIBNAME)='la'
DATA ORANGES;
INPUT VARIETY $ FLAVOR;
TOTAL=VARIETY;
LABLE TOTAL='总数';
cards;
navel 9 8
teom 10 2;
proc sort data=orange;
by descending total;
run;
proc print data=orange;
var _numeric_;
title '对orange的品尝检验结果'
run;
libname mulu 'C:\';
DATA S;
infile 'e:\sas\xxx.dat';
input a b c;#需要新生成变量,适用Dat文件内的数据
run;
proc print;
run;
DATA S;
infile 'e:\sas\xxx.dat';
input a b c;#需要新生成变量,适用Dat文件内的数据
run;
proc print;
run;
比较运算符
=(EQ) …,^=(NE),>(gt) <(LT) >=(GE) <=(LE) IN
逻辑运算符&(AND) |(!)(or) (~)(not)
其它:><(最小值) <>(最大值)
data a;
if a>:‘S’#加了冒号,表示只比较首字母
scan(s2,n)#查找s2内第二个
c1=index(x6,x7)#x6找有x7位置
c2=substr(x6,3,3)
weekday(date)
内部数据
data flow;
input x y ;
z=x+y;
put x= y= z=;
put _n_= _error_= ;#_n_表示data步已经执行的次数
cards;
10 20
100 200
1000 2000;
run;
data new3(lable='s s ss');
set flow;
run;
#data _null_不产生实际的数据集,只暂时把内容存储于内存,以供put语句等读取结果,可以节省内存;
data _last_ 以最近产生的数据集命名并取代其内容
input(g1-g5)(3*7.2,2*5.2)#g1-g3都是7位数,两个小数点,g4-g5是五位数
input(a b)($5.)都是字符串并且占五位
input($,5.)
data ;
input x@@;
cards;
1 2 3 4;
run;
#@@的作用是可以把一行的变量读到一个变量去
data ;
input x y@@;
cards;
1 2 3 4; #1,给X2给y然后3又给X
run;
#Data后无数据集名字,会自动生成
@n从第n列开始读取数据,+n 从当前第n行加两行 #n跳到第n行来
:读值时第一次遇到分隔符或是数据行末尾 或是读满列数而结束 &字符型输入值可以嵌有一个或几个空格 ~字符型输入值保留引号
put all 输出所有变量的值
data a;
do n=2 to total;
set orange.flow point=n nobs=total;
output;end;stop;run;
data a;
infile cars dlm=',';
input x y z;
cards;
1,2,3
44,5,6;
data jn;
input a b ;
file print;
put _n_;
if a>3 then delete;
cards;
1 2
3 3
6 3
3 3
;
data ;
input x 1-3 y;#表示X读取位数为3 剩下的是y
cards;
stop不会继续后面的