2016-04-12 15 views
0

proq freqを使用して、特定の日に誰かが消費した食品の種類(fint変数)の数をカウントしたいと思います。私のデータは、さまざまな食べ物タイプとインタビュー日数の異なる繰り返しIDnoを持つ長い形式です。しかし、SASはハングしてコードを実行しません。私は300,000以上のデータラインを持っています。これを行う別の方法はありますか?繰り返しID変数を持つproc freqの使用

proc freq; 
    tables idno*fint*foodtype/out=countft; 
run; 
+0

300kレコードは簡単です。他の何かが問題です。おそらくあまりにも多くの組み合わせ?あなたは何種類の組み合わせを期待していますか?数が異なるproc SQLは機能しますか? – Reeza

+0

proc freqのdata = statementはどこですか?正しいデータセットを指していると思いますか? – Reeza

+0

Reezaさんに感謝します。私はちょうど省略されているので、データステップは問題ありません。私は思っている組み合わせが多すぎます。 – Bee

答えて

0

データ構造は少し不明ですが、proc手段もカウント可能です。 あなたは一人一人のために複数の日付を持っていると仮定すると、それぞれの日付の複数の食品の種類、あなたが使用することができます。

data dataset; 
set dataset; 
count=1; 
run; 
proc means data=dataset sum; 
class idno fint foodtype; 
var count; 
output out=countft sum=counftpday; 
run; 

/* Usually you only want the lines with the largest _type_, so keep going here */ 

proc sql noprint; 
select max(_type_) into :want from countft; 
quit; /*This grabs the max _type_ from output file */ 

data countft; 
set countft; 
where _type_=&want.; 
run; 
+2

proc手段でNWAYオプションを使用すると、最大の_type_を自動的に保持できます。 – Reeza

0

のproc SQLを試してみてください:ソート、

proc sql; 
create table want as 
select distinct idno, fint, foodtype, count(*) as count 
from have 
order by 1, 2, 3; 
quit; 

最悪のシナリオとでカウントデータステップ。

proc sort data=have; 
by idno fint foodtype; 
run; 

data count; 
set have; 
by idno fint foodtype; 
if first.foodtype then count=1; 
else count+1; 
if last.foodtype then output; 
run;