from dictionary.columns
where libname='SASHELP' and name='tabname';
quit;
注意这里是用dictionary.columns的信息
用SASHELP.VMEMBER来撮DICTIONARY.MEMBERS的信息:
proctabulate data=sashelp.vmember format=8.;
class libname memtype;
keylabel N=' ';
table libname,memtype/rts=10 misstext='None';
run;
DICTIONARY是一个非常有用的信息库,本文主要是介绍一下其基本功能,以后有时间的话会对其进行详细介绍。
3 SQL过程步与宏语言的交互
SQL过程步可以创建SAS宏变量,也可以生成一些自动的宏变量,从其中可以更好地理解SQL处理过程。
3.1 在SQL过程中使用宏变量
%let outputnumber=10;
procsql outobs=&outputnumber;
options nolabel nocenter;
select * from dictionary.tables
where libname='SASHELP';
quit;
这个很简单,就不讲了,下面讲一下本节的重点。
3.2 创建宏变量
SQL过程步可以通过into语句来创建或更新宏变量,主要有三种方式。这里要注意的是,在使用into语句创建宏变量时,我们是不能在create table或create view语句里使用的。当我们不需要输出结果时,可以用noprint选项。
3.2.1 结果只有一行
Select col1,col2,…
Into :mvar1,:mvar2,…
From …
例:
procsql noprint;
select avg(sales),min(sales),max(sales)
into :mean, :min, :max
from sashelp.shoes;
quit;
%put &mean &min &max;
这种方式适合输出结果只有一行的情况。
3.2.2 提取前N行的值
Select a,b,…
Into :a1-:an, :b1-:bn
From …
这种方法前前N行的查询结果输入到一系列的N个宏变量中。
例:
procsql noprint;
select Region,count(*) as frequency
into :Region1-:Region3, :freq1-:freq3
from sashelp.shoes
group by Region;
quit;
%put &Region1 &Region2 &Region3;
%put &freq1 &freq2 &freq3;
3.2.3 提取所有数据
Select col1,col2,…
Into :macrovar1, :macrovar2,…
Separated by ?delimiter?
From …
这里将每列的所有数据都输出到一个宏变量中,并以指定的分隔符分开。
例:
procsql noprint;
select distinct Region
into :RegionAll
separated by ','
from sashelp.shoes;
quit;
%put &RegionAll;
3.3 SQL过程步自动产生的宏变量
SQLOBS:记录输出结果或被删除的观测值个数
SQLRC:包含每个SQL语句的返回代码
SQLOOPS:包含SQL过程步内循环的次数
例:
procsql;
select *
from sashelp.shoes;
quit;
%put &SQLOBS;
得到输出观测的条数。
4 程序测试与效率
这里主要介绍几个SQL过程步的选项:
Exec/Noexec:控制SQL语句是否执行
Nostimer/Stimer:在SAS日志中报告每个SQL语句的效率统计数据
Noerrorstop/Errorstop:批处理时控制当有错误发生时,是否要检查语法
例:noexe与feedback

