[ncl-talk] If statements and Fill_Values

Karin Meier-Fleischer meier-fleischer at dkrz.de
Fri Jan 10 03:49:12 MST 2020


Hi all,

you can run a simple test to see if a variable has missing values.

Assume topo is the name of the variable then

printVarSummary(topo)

n = num(.not. ismissing(topo))
print("---> Number of missing values: "+n)

if(any(ismissing(topo))) then
    print("---> data contains missing values")
elseif(all(ismissing(topo))) then
    print("---> data contains all missing values")
elseif(.not. ismissing(topo)) then
    print("---> data contains no missing values")
end if

NCL returns something like

Variable: topo
Type: float
Total Size: 1036800 bytes
             259200 values
Number of Dimensions: 2
Dimensions and sizes:    [lat | 360] x [lon | 720]
Coordinates:
             lat: [-89.75..89.75]
             lon: [-179.75..179.75]
Number Of Attributes: 3
   units :    m
   _FillValue :    -9e+33
   missing_value :    -9e+33
(0)    ---> Number of missing values: 85635
(0)    ---> data contains missing values

-Karin

Am 10.01.20 um 11:27 schrieb Rashed Mahmood:
> Hi Barry,
> I think in your case, Karin's suggestion would work best. Just make 
> sure that the variable " ratio_hr " has _FillValue attribute assigned 
> to it.
> Cheers,
> Rashed
>
> On Fri, Jan 10, 2020 at 2:18 AM Barry Lynn <barry.h.lynn at gmail.com 
> <mailto:barry.h.lynn at gmail.com>> wrote:
>
>     Hi Rashed:
>
>     Thank you for your input (and to Beata).
>
>     I need to check all values; if some are not missing, then I want
>     to execute the loop.
>
>     I will try the various suggestions and return.
>
>     Have a nice weekend,
>
>     Barry
>
>     On Fri, Jan 10, 2020 at 12:09 PM Rashed Mahmood
>     <rashidcomsis at gmail.com <mailto:rashidcomsis at gmail.com>> wrote:
>
>         I think there is some logical issue(s) in your if statements:
>         Issues:
>         1) if(CL(n).eq.CL at _FillValue)then ; This would not work
>         because the "@_FillValue" attribute cannot be used inside if
>         statements, I think. You can define a missing value variable
>         before hand, e.g:
>
>         missV = CL at _FillValue
>         print(missV)
>         if(CL(n).eq.missV)then
>         ...
>
>         2) if(all(ismissing(CL)))then : For this statement since you
>         are asking "if ALL Values  of CL are missing which might not
>         be the case since some values would be valid.
>
>         Does your variable CL has _FillValue attribute assigned? What
>         is printVarSummary(CL) suggest?
>
>         *The simplest statement would be( if CL has "_FillValue"
>         attribute assigned to it)*:
>
>         **
>         *if(ismissing(CL(n)))then*
>         continue
>         else
>          ...
>         end if
>
>         hope that helps.
>         Rashed
>
>
>
>
>
>
>         On Fri, Jan 10, 2020 at 1:21 AM Beáta Szabó-Takács via
>         ncl-talk <ncl-talk at ucar.edu <mailto:ncl-talk at ucar.edu>> wrote:
>
>             Dear Karin and Barry,
>
>             I checked different ways to skip the _FillValues. Here is
>             my brief script:
>
>             begin
>
>             input = addfile("NetCDF_2017_07_18.nc","r")
>
>             CL=input->cLayer1
>                                                               ;First
>             cloud layer, its _FillValue is -9900
>
>             CL1 = new((/5400/), typeof(CL), 1e20)
>
>             CL2 = new((/5400/), typeof(CL), 1e20)
>
>             CL3 = new((/5400/), typeof(CL), 1e20)
>
>             CL4 = new((/5400/), typeof(CL), 1e20)
>
>             do n=1,5399
>
>                     if(CL(n).eq.CL at _FillValue)then
>
>                        continue
>
>                    else
>
>                       CL1(n) = CL(n)
>
>                     end if
>
>                    if(all(ismissing(CL)))then
>
>                        continue
>
>                  else
>
>                       CL2(n) = CL(n)
>
>                  end if
>
>                     if(CL(n).ne.CL at _FillValue)then
>
>                       CL3(n) = CL(n)
>
>                     end if
>
>                 if(.not.ismissing(CL(n)))then
>
>                     CL4(n) = CL(n)
>
>                  end if
>
>             end do
>
>             print(CL1(1:500))
>
>             print(CL2(1:500))
>
>             print(CL3(1:500))
>
>             print(CL4(1:500))
>
>             end
>
>             Unfortunately, none of the if statements skip the
>             _FillValues. I do not understand why.
>
>             Beata
>
>             *From:*ncl-talk [mailto:ncl-talk-bounces at ucar.edu
>             <mailto:ncl-talk-bounces at ucar.edu>] *On Behalf Of *Karin
>             Meier-Fleischer via ncl-talk
>             *Sent:* Friday, January 10, 2020 9:26 AM
>             *To:* ncl-talk at ucar.edu <mailto:ncl-talk at ucar.edu>
>             *Subject:* Re: [ncl-talk] If statements and Fill_Values
>
>             Hi,
>
>             what about
>
>             if(all(ismissing(ratio_hr))) then
>                continue
>             end if
>
>             -Karin
>
>             Am 10.01.20 um 09:17 schrieb Barry Lynn via ncl-talk:
>
>                 Hi:
>
>                 I will give it a try.
>
>                 In the meantime, I am wondering why you suggest the
>                 ne, rather than the equal to with a continue and an else?
>
>                 On Fri, Jan 10, 2020 at 9:52 AM Beáta Szabó-Takács
>                 <szabo.b at czechglobe.cz <mailto:szabo.b at czechglobe.cz>>
>                 wrote:
>
>                     Dear Barry,
>
>                     The continue will proceed directly to the next
>                     iteration. Try to skip the _FillValues by:
>
>                     if(max(ratio_hr).ne.ratio_hr at _FillValue.and
>                     <mailto:ratio_hr).ne.ratio_hr at _FillValue.and>.
>                     min(ratio_hr).ne.ratio_hr at _FillValue)then
>                     <mailto:.ne.ratio_hr at _FillValue)then>
>
>                     statement(s)
>
>                     end if
>
>                     I hope it solves your issue.
>
>                     Kind regards,
>
>                     Beata
>
>                     *From:*ncl-talk [mailto:ncl-talk-bounces at ucar.edu
>                     <mailto:ncl-talk-bounces at ucar.edu>] *On Behalf Of
>                     *Barry Lynn via ncl-talk
>                     *Sent:* Friday, January 10, 2020 7:40 AM
>                     *To:* ncl-talk <ncl-talk at ucar.edu
>                     <mailto:ncl-talk at ucar.edu>>
>                     *Subject:* [ncl-talk] If statements and Fill_Values
>
>                     Hi:
>
>                     I am trying to skip a loop where all the numbers
>                     (min/max) are _FillValues.
>
>                     min=9.96921e+36 max=9.96921e+36
>
>                     However, I get this error, even though my if
>                     statement is checking this.
>
>                     fatal:The result of the conditional expression
>                     yields a missing value. NCL can not determine
>                     branch, see ismissing function
>
>                     if
>                     (max(ratio_hr).eq.ratio_hr at _FillValue.and.min(ratio_hr).eq.ratio_hr at _FillValue)then
>                     <mailto:.eq.ratio_hr at _FillValue.and.min(ratio_hr).eq.ratio_hr at _FillValue)then>
>
>                     continue
>
>                     else
>
>                     Is there someway around this?
>
>                     Thank you
>
>                     -- 
>
>                     Barry H. Lynn, Ph.D
>
>                     Senior Associate Scientist, Lecturer,
>
>                     The Institute of the Earth Science,
>                     The Hebrew University of Jerusalem,
>                     Givat Ram, Jerusalem 91904, Israel
>
>                     Tel: 972 547 231 170
>                     Fax: (972)-25662581
>
>                     C.E.O, Weather It Is, LTD
>                     Weather and Climate Focus
>                     http://weather-it-is.com
>                     Jerusalem, Israel
>                     Local: 02 930 9525
>                     Cell: 054 7 231 170
>                     Int-IS: x972 2 930 9525
>
>
>                 -- 
>
>                 Barry H. Lynn, Ph.D
>
>                 Senior Associate Scientist, Lecturer,
>
>                 The Institute of the Earth Science,
>                 The Hebrew University of Jerusalem,
>                 Givat Ram, Jerusalem 91904, Israel
>
>                 Tel: 972 547 231 170
>                 Fax: (972)-25662581
>
>                 C.E.O, Weather It Is, LTD
>                 Weather and Climate Focus
>                 http://weather-it-is.com
>                 Jerusalem, Israel
>                 Local: 02 930 9525
>                 Cell: 054 7 231 170
>                 Int-IS: x972 2 930 9525
>
>
>
>                 _______________________________________________
>
>                 ncl-talk mailing list
>
>                 ncl-talk at ucar.edu  <mailto:ncl-talk at ucar.edu>
>
>                 List instructions, subscriber options, unsubscribe:
>
>                 http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
>             _______________________________________________
>             ncl-talk mailing list
>             ncl-talk at ucar.edu <mailto:ncl-talk at ucar.edu>
>             List instructions, subscriber options, unsubscribe:
>             http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
>
>
>     -- 
>     Barry H. Lynn, Ph.D
>     Senior Associate Scientist, Lecturer,
>     The Institute of the Earth Science,
>     The Hebrew University of Jerusalem,
>     Givat Ram, Jerusalem 91904, Israel
>     Tel: 972 547 231 170
>     Fax: (972)-25662581
>
>     C.E.O, Weather It Is, LTD
>     Weather and Climate Focus
>     http://weather-it-is.com
>     Jerusalem, Israel
>     Local: 02 930 9525
>     Cell: 054 7 231 170
>     Int-IS: x972 2 930 9525
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20200110/bf6c386e/attachment.html>


More information about the ncl-talk mailing list