2014-01-17 122 views
0

有谁知道为什么PROC SQL不能在SAS/SAS:数据步与PROC SQL

例如DATA步骤中使用,

DATA test; 
set lib.table; 
    PROC SQL; 
    ... 
    QUIT; 
    ...some operators... 
RUN; 

PROC SQL..RUN后;对运营商没有处理。

感谢您的解释。

回答

6

因为像所有PROC的 - 它作用于/产生数据集 - 它不会使一个数据步内感。您可以使用SQL的FROM子句指定输入(类似于datastep 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; 
+0

感谢您的回答 –

3

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;