SASの時間比較方法とは?

このQ&Aのポイント
  • SASを使用して時間の間隔を計算する方法について解説します。
  • 日数を計算する場合はDATDIF関数を使用しますが、時間の場合は別の方法が必要です。
  • 具体的なデータを使用して、時間の場合の計算方法を詳しく説明します。
回答を見る
  • ベストアンサー

SASの時間比較

以下のようなデータがあった場合 時間の間隔を出す場合どのようにすればいいのでしょうか? 日数ではDATDIFを使えばいいのですが 時間の場合はどうすればいいのでしょうか? name,time sato,2005/06/10 21:00:05 sato,2005/06/10 21:30:05 sato,2005/06/10 21:40:05 suzuki,2005/06/10 20:00:00 suzuki,2005/06/10 20:10:00 suzuki,2005/06/10 20:30:00 tanaka,2005/06/10 21:00:05 tanaka,2005/06/10 21:13:05 tanaka,2005/06/10 21:10:05 tanaka,2005/06/10 21:30:05 tanaka,2005/06/10 21:31:05

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

以下のようにすればよいです. 21:00:05 のデータに対しては time は 75605,21:30:05 に対しては 77405 が入ります. DATA data1; INPUT name$ date time; INFORMAT date YYMMDD10. time TIME8.; CARDS; sato 2005/06/10 21:00:05 sato 2005/06/10 21:30:05 sato 2005/06/10 21:40:05 suzuki 2005/06/10 20:00:00 suzuki 2005/06/10 20:10:00 suzuki 2005/06/10 20:30:00 tanaka 2005/06/10 21:00:05 tanaka 2005/06/10 21:13:05 tanaka 2005/06/10 21:10:05 tanaka 2005/06/10 21:30:05 tanaka 2005/06/10 21:31:05 RUN;

maryoha
質問者

お礼

ソースコードまで丁寧に教えていただき ありがとうございました。 SASは他の言語と違い書籍も少なく 自分で勉強するのが難しいです。 インターネットで探してもSASに関するサイトは 見当たりません。 失礼ですがFumisannariさんはどのように勉強されたのでしょうか? 参考にできる本、サイトがありましたら 教えていただけるとありがたいです。 では、また何かありましたら 宜しくお願いいたします。 今回は本当にありがとうございました。

その他の回答 (1)

回答No.1

どこの「間隔」を求めたいのでしょうか? 例えば,21:00:05 と 21:30:05 の間隔を求めたいのだとします. 適切な入力フォーマットでデータを読み込んであれば,それらの「時刻」は SAS データセット内部では秒として保存されています.したがって,単純に引き算を実行すれば,1800 という答えが得られます. 後は必要に応じて 60 で割って 30 (分) という答えを得たり,さらに 60 で割って,0.5 (時間) とすればよいです.

maryoha
質問者

補足

返信ありがとうございます。 引き算して求めるんですね。 間隔はFumisannariさんがおっしゃるとおりの間隔です。 >適切な入力フォーマットでデータを読み込んであれば 「2005/06/10 21:00:05」の場合の入力フォーマットはどのように記述すればよいのでしょうか 教えていただけるととても助かります。 宜しくお願いいたします。

関連するQ&A

  • Perl 順序が!?

    #! usr/bin/perl %toshi=("suzuki"=>24,"sato"=>26,"tanaka"=>32); foreach $key(keys(%toshi)){ print "($key,$toshi{$key})\n"; } exit; とありますが、どうして結果表示が (tanaka,32) (suzuki,24) (sato,26) となるのでしょうか? (suzuki,24) (sato,26) (tanaka,32) なぜこれにはならないのですか?

    • ベストアンサー
    • Perl
  • MySQLでのレコード移動(オートインクリメント)

    MySQL 5.1 (win)で以下の流れで「オートインクリメントをリセット後」、レコード移動したいです。 ※idはauto_incrementしています。 1.既存のレコード一覧からレコード2を削除 id name comment 1 tanaka こんにちは ※削除 3 suzuki こんにちは 4 nakamura こんにちは  5 kimura こんにちは 2.この後、idのAUTO_INCREMENTを「1」にリセット。 3.新規レコードを追加 id name comment 1 tanaka こんにちは 3 suzuki こんにちは 4 nakamura こんにちは  5 kimura こんにちは 2 sato こんにちは ←idが空き番の2から始まり、このようにレコードが最後に追加されますよね? この後これをレコード1とレコード3の間に移動させたいのですがそんなSQL文はありますか? ***最終結果*** id name comment 1 tanaka こんにちは 2 sato こんにちは ←ココに移動 3 suzuki こんにちは 4 nakamura こんにちは  5 kimura こんにちは よろしくお願いします

    • ベストアンサー
    • MySQL
  • MySQL文を教えて下さい。

    テーブル名:table1 name | email | date ------+------------+------------- tanaka | aaaaaaaaaaa | 2010-11-01 sato | aaaaaaaaaaa | 2010-11-15 suzuki | bbbbbbbbbbb | 2010-11-10 上記のようなテーブルがあった時、同じemailの場合、 日付の新しいカラムで抽出して、下記の様な結果を得たいです。 name | email | date ------+------------+------------- sato | aaaaaaaaaaa | 2010-11-15 suzuki | bbbbbbbbbbb | 2010-11-10 この様な結果を得る為のMySQL文を教えて下さい。 初歩的な質問で申し訳ありません。お願い致します。

    • ベストアンサー
    • MySQL
  • select文の記述について

    select文の記述について質問させていただきます。 下記のデータベースのテーブルの先頭からnumberを条件として 2名分のデータをselect文にて抽出したいと思っております。 (numberが重複し、重複数も異なるデータとなります。) select文の記述をどのようにするか教えていただければと思っております。 よろしくお願いいたします。 データベースのテーブル +——+—————+—————+————+ | id | name | number | score | +——+—————+—————+————+ | 1 | tanaka | 358 | 98 | | 3 | tanaka | 358 | 23 | | 4 | tanaka | 358 | 45 | | 11 | yamada | 126 | 63 | | 17 | yamada | 126 | 77 | | 23 | suzuki | 274 | 36 | | 45 | suzuki | 274 | 16 | | 59 | suzuki | 274 | 89 | | 73 | suzuki | 274 | 75 | | 80 | hanako | 89 | 24 | | (以下続く) | +——+—————+—————+————+ 抽出結果 +——+—————+—————+————+ | id | name | number | score | +——+—————+—————+————+ | 1 | tanaka | 358 | 98 | | 3 | tanaka | 358 | 23 | | 4 | tanaka | 358 | 45 | | 11 | yamada | 126 | 63 | | 17 | yamada | 126 | 77 | +——+—————+—————+————+

    • ベストアンサー
    • MySQL
  • 複数テーブルをまとめてソート

    たとえば次のような、都道府県ごとのテーブルがあり、 ID、名前、得点の列があるとします。 テーブル1(テーブル名:tokyo) ID NAME SCORE 1 yamada 89 2 tanaka 45 テーブル2(テーブル名:osaka) ID NAME SCORE 1 sato 65 2 suzuki 22 これらのテーブルをまとめて、全国で得点が上位順に並べたいと 思っております。また、結果にはどのテーブルに所属するものかを 判別する列を追加したいのですが、どういう文を記述したらよいのでしょうか? 望みの結果は次のようなものです。 NAME SCORE TABLE_NAME yamada 89 tokyo sato 65 osaka tanaka 45 tokyo suzuki 22 osaka よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 階層構造に対するSQLに関して

    階層構造に対するSQLに関して教えて下さい。 以下のような階層構造になっているデータが存在していますが、単純にトップを指定し、それ以下の 組織を表示させる事は簡単かと思われますが、下位層の品番を指定、その人が所属している部署のトップだけを 抽出するようなSQLはどのように記述すれば良いでしょうか、、、 恐らくCONNECT BY を使うかと思われますが、記述の仕方がわかりません。 以下のケースでは、TANAKAさんを指定した場合、TANAKAさんは兼務している為、トップとしては、 SUZUKIさんとSASAKIさんが抽出されるSQLとしたいです。 【テーブル内容】 EMPNO ENAME MGR(上司) 1 SUZUKI 2 SATO 1 3 YAMADA 1 4 TANAKA 3 5 FUKUDA 1 6 ENDO 5 7 KOIKE 6 8 SASAKI 4 TANAKA 8 よろしくお願いします。

  • Matlabでリストにあるファイルを開く

    テキストファイル(.dat, .txt, .csvなどなんでもよい)にリストがあります。 それをMatlabで読み込み、リストにある文字列のファイルを開くということはできますでしょうか? 例) テキストファイルのリスト Sato Suzuki Tanaka ... あるフォルダ内にあるファイル Akashi.mat Bando.mat Chikamatsu.mat ... Sato.mat Shibata.mat Suzuki.mat Takasaki.mat Tanaka.mat ... というように、複数のファイルの中からリストにあるファイルだけを読み込みたいのです。 宜しくお願い致します。

  • テキストファイル内を並べ替える

    Perl初心者です。 コンマで区切られたデータファイル(data.txt)があります。 (データの並びは、num,age,name) 1,20,nakamura 1,19,ito 2,20,sato 1,20,suzuki このようなデータを並び替えたいのです。 並び替えの優先順位は1番がnumで、2番がageで、3番がnameです。 こういう並び替えはどうしたらいいでしょうか?

    • ベストアンサー
    • Perl
  • 時間の比較は可能でしょうか?

    <form name="time_hikaku"> 開始時刻 <input type="text" name="hour" maxlength="2"> <input type="text" name="min" maxlength="2"> 終了時刻 <input type="text" name="end_hour" maxlength="2"> <input type="text" name="end_min" maxlength="2"> </form> で入力した時刻を比較し、終了時刻が開始時刻 より小さい場合にAlert表示したいのですが、 どうすれば、Javascriptで時刻比較できますでしょうか? 09:00 8:00など、0が入力される可能性もあるので、 時間関数などがあればできそうですが。。

  • mysql データ取得

    db_name = AAA table_name = BBB _______ id name 1 tanaka 2 yamada 3 suzuki _______ 上記のidを指定して、 nameを取得するには どうしたらいいですか? 例)id = 1 を指定して返り値に   tanakaが代入される

    • 締切済み
    • PHP

専門家に質問してみよう