2016-11-21 27 views
0

proc sqlのコードをSASで再実行したときに、inobs =とoutobs =オプションを使用すると、毎回同じ行になります。これは、私がinobs =とoutobs =ただ最初に行を利用できると結論づけます。これは本当ですか? outobs =のようなオプションがありますか?outobs = nランダム行ですか?Proc SQL:inobsとoutobsがランダムではない

+1

AFAIKではありません。ランダムサンプルが必要な場合は、PROC surveyselectまたはデータステップを使用します。 – Reeza

+0

よろしくお願いします。 – Erosennin

+0

以下のソリューションを使用できますが、再現性はありません。これは奇妙な基準のようですが、あなたのコードは再現可能でなければなりません。あなたのランダム系列は、同じ種からの限りランダムです。 – Reeza

答えて

4

ダミー番号を誘導し、ダミー番号でソートすると、データセットの正確な行数が生成されます。

proc sql outobs=5; 
    select ranuni(1234) as num,* from sashelp.class order by num; 
quit; 
+0

ありがとう、良いアイデア:) – Erosennin

2

proc sqlの中で最も簡単にできることは、このようなものだと思います。それは正確な行数を与えるわけではありませんが、各ソース表にいくつの行があるかを事前に知っておけば、おおよそ正しい数を得ることができます。

/*20% random sample, same sample each run */ 
proc sql; 
    create table example as 
    select * from sashelp.class(where=(ranuni(1) < 0.2)); 
quit; 

/*20% random sample, different sample each run */ 
proc sql; 
    create table example as 
    select * from sashelp.class(where=(rand('UNIFORM') < 0.2)); 
quit; 

Reezaが示唆したようにそれ以外の場合は、proc surveyselectまたは他のいくつかのメソッドを介して、あなたのデータセットからサンプルを取り、proc sqlにそれらを渡します。

個々のデータセットオプション内でwhere句を使用することをお勧めします。既存のwhere句を含めてクエリの残りの部分を変更せずに残しておくことができます。

+0

素晴らしい回答、ありがとうございます! – Erosennin

関連する問題