2017-08-04 14 views
0

我需要从数据仓库中的不同表中抽取大量数据,比如说600-700个变量......现在,数据集在其原始数据库表单将很容易地触及150个演示--79 MM行,并且为了我的分析目的,我只需要一百万行......如何通过对行进行简单的随机采样,直接从仓库使用proc sql获取数据。简单的随机抽样,同时从仓库(oracle引擎)使用proc sql在sas中提取数据

下面的代码不会工作作为ranuni不受Oracle

proc sql outobs =1000000; 
    select * from connection to oracle(
    select * from tbl1 order by ranuni(12345); 
    quit; 

你怎么建议我做

+0

不如上一个节目现场问,因为它是不明确的,你有一个统计的问题在这里。 – 2017-08-04 13:45:57

+0

我知道,但我们很多统计人员可以从中受益 – Rohan

+2

[简单随机采样,同时从仓库(oracle引擎)使用proc sql在sas中提取数据时可能的副本](https://stackoverflow.com/questions/45518018/简单随机抽样,而拉动从仓库数据引擎使用pr) –

回答

0

我知道你需要大约700行的样本支持。让我们把在宏变量(对于那些更熟悉其它languagues比SAS,这就像一个预编译器变量成才。)

%let required_rows = 700; 

现在计算这个数据的哪一部分(希望ORACLE不扫描整个表格)。我再次把它放在一个宏变量中。 (对于那些熟悉其他languagues,是SAS拥有技术,同时执行代码填写在宏变量,这是可能的,因为SAS确实逐步编译。)

proc sql; 
    select &required_rows/rows_tbl1 
    into :required_fraction 
    from connection to oracle 
    ( select count(*) as rows_tbl1 
     from tbl1); 

而且finaly retreive有关多条记录

select * from connection to oracle 
    ( select * 
     from tbl1 
     where DBMS_RANDOM.VALUE < &required_fraction); 
quit; 

备注:

  • 我没有测试此代码。
  • 如果您需要的700行,你可能会retreive所需的部分两次,随机抽样的SAS