1

大まかに言えば、次のようなデータセットがあります。

╔════════╦══════════╦══════════╗
║ TICKER ║   DAY    ║   TIME   ║
╠════════╬══════════╬══════════╣
║ AET    ║ 20100104 ║ 09:30:04 ║
║ AET    ║ 20100104 ║ 09:30:04 ║
║ AET    ║ 20100104 ║ 09:30:04 ║
║ AET    ║ 20100104 ║ 09:30:05 ║
║ AET    ║ 20100104 ║ 09:30:05 ║
║ AET    ║ 20100104 ║ 09:30:06 ║
║ AET    ║ 20100104 ║ 09:30:06 ║
║ AET    ║ 20100104 ║ 09:30:06 ║
╚════════╩══════════╩══════════╝

その時間の最後の観測ではない場合は 0 の値を表し、その時間の最後の観測である場合は 1 の値を表す追加の列を追加します。したがって、次の列を追加します。

╔════════╦══════════╦══════════╦═══════╗
║ TICKER ║   DAY    ║   TIME   ║ dummy ║
╠════════╬══════════╬══════════╬═══════╣
║ AET    ║ 20100104 ║ 09:30:04 ║     0 ║
║ AET    ║ 20100104 ║ 09:30:04 ║     0 ║
║ AET    ║ 20100104 ║ 09:30:04 ║     1 ║
║ AET    ║ 20100104 ║ 09:30:05 ║     0 ║
║ AET    ║ 20100104 ║ 09:30:05 ║     1 ║
║ AET    ║ 20100104 ║ 09:30:06 ║     0 ║
║ AET    ║ 20100104 ║ 09:30:06 ║     0 ║
║ AET    ║ 20100104 ║ 09:30:06 ║     1 ║
╚════════╩══════════╩══════════╩═══════╝

SAS Enterprise Guide を使用していますが、行 1 の値と行 2 の値を比較する方法がわかりません。基本的にやろうとしているのは、次のような式を作成することです。

IF TIME = TIME(row+1)
THEN 0
ELSE 1

SASエンタープライズでこれが可能かどうかはわかりません。私はこれにまったく慣れていないので、Excelでそのようなことをしても問題ありません。Excel は、1,700 万行のデータをうまく処理できません。前もって感謝します!

4

2 に答える 2

2

last.ここで関数を使用する必要があります。これは、データが適切に並べ替えられている限り使用できます (たとえば、以下では、TICKER、DAY、TIME で並べ替える必要があります)。

data new;
  set original;
  by TICKER DAY TIME;
  if last.TIME then dummy = '1';
run;

(そうでない場合は、procソートを行う必要がありますが、投稿したサンプルデータからはすでにそうでした)

編集:ありがとう@ジョー

于 2014-07-14T16:03:09.343 に答える
0

これはかなり大雑把な方法ですが、うまくいきます...これに機能があるかどうかは100%わかりませんが、これは私がすぐに思いついたものです...

//Create index of each obs.
DATA DATE_TIME_TABLE;
SET DATE_TIME_TABLE;
   COLUMN INDEX;
   INDEX=_N_;
   OUTPUT;
RUN;

//Sort by descending index for each time. Last obs of each time now is first.
PROC SORT DATA=DATE_TIME;
BY TIME DESCENDING INDEX;
RUN;

//The first obs = 1 everything else = 0
DATA DATE_TIME_TABLE;
SET DATE_TIME_TABLE;
   IF TIME <> LAG(TIME) THEN
      dummy = 1;
   ELSE dummy = 0;
   END;
RUN;

//Put the table back to how it was
PROC SORT DATA=DATE_TIME_TABLE;
BY INDEX;
RUN;
于 2014-07-14T16:24:48.093 に答える