• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:fortranについて)

Fortran初心者のための欠損値処理方法

このQ&Aのポイント
  • Fortranをはじめたばかりの初心者が、欠損値処理について質問しています。
  • 質問者はhourの1時から24時までの中に欠損値があり、0か無視させたいとしています。
  • 欠損値はデータの中では999となっています。どのように書けばよいでしょうか?

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「読まない」とするよりも「読んでから補正する」方が簡単ですね. where (hour == 999) hour = 0 とか?

ryoji
質問者

お礼

ありがとうございました。すごいです。できました。where文を使うとはわからなかったです。色々ネットや本で調べていたのですが、where文の使い方が、命令が「条件の対象となった配列への代入文のみ」であるということ、と書いてあるんですが、よくわかりません。if文との違いが、どう解釈すればよいか。配列の場合はwhere文?というわけでもないですよね? あと、where文を使わず、if文でも、同じように表現できますか? 最後に、等しいの記号は(==)だと思っていたのですが、倫理式だけその仕様なのでしょうか?他は、等しい表すときは(=)で表現できるんですか? すいません、どうか教えていただけませんか。お願いします。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

where は「配列の各要素に対して条件をチェックし, あてはまる要素に対して代入する」という動作を (概念的には全て並列に) 行います. なので, where の条件は「配列に対する条件式」であり, where が制御するのは「配列に対する代入文」 (または別の where) です. これに対して if の条件は「スカラに対する条件式」であり, その制御する文は代入に限らずなんでも使えます. で, 「スカラに対する条件式」を書くためには自動的に do ループを必要とします. だから, この場合は例えば do i = 1, 24 if (hour(i) == 999) then hour(i) = 0 end if end do のようになります. 「ある条件にあてはまる要素に値を代入する」だけなら where の方がシンプルになりますね. あと, 「等しい」ことを表すのは常に == では? = だと「代入」のはず.

ryoji
質問者

お礼

ありがとうございました。大変わかりやすく、感動しました。また、FORTRANで質問する可能性が高いですが、その際もまた見かけましたらお答えいただけるとうれしいです。

関連するQ&A