私の質問の答えを探していましたが、見つけられませんでしたので、ここに質問を投稿します。 私は巨大なデータセットを持っています。私は質問をする前に、それがどのように見え、何をしたいのかを説明します。1時間の時間枠を設定してからSASでループする
**ID** **Website** **Datetime** **Googlevisit**
A Google 2014/06/01 16:50 1
A Facebook 2014/06/01 17:40 1
A Yahoo 2014/06/01 18:00 0
A Facebook 2014/06/01 18:10 0
A Google 2014/06/01 19:00 1
B Amazon
B Aol
B Facebook
C SouthWest
IDは個人IDです。 ウェブサイトは、各個人が閲覧した場所です。 日時は、各個人がウェブサイトを閲覧した日時です。
私がやりたいことは、現在の行時間から1時間前の間隔を設定し、個人が1時間以内にGoogleに行ったかどうかを確認することです。 たとえば、19:00から18:00までの個人Aが1時間以内に少なくとも1回はGoogleを検索した場合、新しい列の新しい値は1です。 再び、個人Aは18:10から17:10に変更されませんでした再び、18:00から17:00までの個人AはGoogleを検索しなかったので、値は0です。 再び、個人Aは17:40から16: 40はそのインターバル内でGoogleを少なくとも1回検索したので、その値は1です。
私はコーディングでそれほど良くはありませんでしたが、私はこの解決策を得るのに疲れました。
私はthis->
DATA A; SET A;
if Website='Google' then Googlevisit=1;
else Googlevisit=0;
where Datetime between INTNX('second',Datetime,-3600) and Datetime;
run;
もこのtoo->
DATA A; SET A;
if Datetime=>INTNX('second',Datetime,-3600) and Datetime<=Datetime then do;
if Website='Google' then Googlevisit=1;
else Googlevisit=0;
end;
run;
しようとした私は、これら2つのコードは、1時間の間隔をキャプチャするつもりだったと思ったけどなかったです。 特定の時間に個人がgoogleにアクセスした場合、その行の新しい値は1または0になります。 誰かが私を助けてくれたら幸いです。私はこれを1週間以上解決しようとしていたので、とても切迫しています。
変数に1/0の値を返します。コードは私のデータセットで完璧に機能しました!あなたのコードについて2つの質問があります。あなたが 'googlevisit = 1ならば、それ以外の場合はgooglevisit = 0'と書き留めなくても、このコードはうまくいきました。具体的には、SASが新しい値を認識したのは、そのようにコードを作成していないにもかかわらず、1または0のいずれかでなければなりません。 2.SASは、現在の行の日時から過去までの時間間隔の設定を認識しませんか?あなたのコードは、現在の行datetimeと1時間の未来の間隔を設定するためです。 –
2.間隔の方向は問題ではありませんでした。私はちょうど正の間隔を選びました。新しい日付と古い日付とを比較しています。値を保持する方法については、私の編集を参照してください。 datetimeの値を自分自身と比較しているので、あなたのアプローチはうまくいきませんでした。 – Jetzler