【发布时间】:2014-01-17 12:52:46
【问题描述】:
有人知道为什么 proc sql 不能在 SAS 的 DATA STEP 中使用吗/
例如,
DATA test;
set lib.table;
PROC SQL;
...
QUIT;
...some operators...
RUN;
在 PROC SQL..RUN 之后;不处理 on 运算符。
感谢您的解释。
【问题讨论】:
标签: sas
有人知道为什么 proc sql 不能在 SAS 的 DATA STEP 中使用吗/
例如,
DATA test;
set lib.table;
PROC SQL;
...
QUIT;
...some operators...
RUN;
在 PROC SQL..RUN 之后;不处理 on 运算符。
感谢您的解释。
【问题讨论】:
标签: sas
因为像所有 PROC 一样 - 它在 数据集 上运行/生成 - 在 数据步骤 内没有意义。您可以使用 SQL 的 FROM 子句指定输入(类似于数据步set <setname>),并且可以使用 SQL 的CREATE TABLE(类似于data <setname>)创建一个新的数据集作为输出。
proc sql;
create table lib.new_table as select * from lib.table;
run;
没有什么可以阻止您在适当的情况下使用视图将一个功能与另一个功能混合在一起,例如:
data lib.new_set_view / view=lib.new_set_view;
set lib.some_set;
/* do normal operations and output's */
run;
proc sql;
create table lib.other_set as select * from lib.new_set_view where something='whatever';
quit;
【讨论】:
Jon 完全正确,但我会在 9.4 中补充一点,dosubl 确实在某种程度上允许此功能(尽管由于速度问题,这通常不是一个好主意):
%macro procsql(sex);
%global mycount;
proc sql noprint;
select count(1) into :mycount from sashelp.class where sex="&sex.";
quit;
%mend procsql;
data addcount;
set sashelp.class;
rc=dosubl('%procsql('||sex||')');
count = input(symget("mycount"),best12.);
run;
【讨论】: