8.39. if 条件選択

  • 書式1: if(bool,num1,num2)

  • 書式2: if(bool,str1,str2)

  • 書式3: if(bool,date1,date2)

  • 書式4: if(bool,time1,time2)

  • 書式5: if(bool,bool1,bool2)

第1パラメータの値が真であれば第2パラメータを、偽であれば第3パラメータを返す。 第1パラメータがNULL値であればNULL値を返す。 第2パラメータと第3パラメータは同じ型でなくてはならないことに注意する。

利用例

importと入力データ(CSV)の準備

 1import nysol.mcmd as nm
 2
 3with open('dat1.csv','w') as f:
 4  f.write(
 5'''id,time
 61,101215
 72,210110
 83,
 94,120001
10''')
11
12with open('dat2.csv','w') as f:
13  f.write(
14'''id,val
151,1
162,0
173,
184,-2
19''')
20
21with open('dat3.csv','w') as f:
22  f.write(
23'''id,val
241,10
252,0
263,-5
274,0
28''')

基本例

time項目が数値として120000以下であれば"AM"、そうでなければ"PM"を出力する。

1nm.mcal(c='if(${time}<=120000,"AM","PM")', a='ampm', i="dat1.csv", o="rsl1.csv").run()
2### rsl1.csv の内容
3# id,time,ampm
4# 1,101215,AM
5# 2,210110,PM
6# 3,,
7# 4,120001,PM

真偽値による条件選択

$b{項目名} によって、データ上の値"1"は真、 "0"は偽、そしてその他の値はNULLとして解釈される。

1nm.mcal(c='if($b{val},"true","false")', a='bool', i="dat2.csv", o="rsl3.csv").run()
2### rsl3.csv の内容
3# id,val,bool
4# 1,1,true
5# 2,0,false
6# 3,,
7# 4,-2,

時刻型として比較

1nm.mcal(c='if($t{time}<=0t120000,"am","pm")', a='ampm', i="dat1.csv", o="rsl4.csv").run()
2### rsl4.csv の内容
3# id,time,ampm
4# 1,101215,am
5# 2,210110,pm
6# 3,,
7# 4,120001,pm

if関数のネスト

1nm.mcal(c='if(${val}>0,"plus",if(${val}<0,"minus","zero"))', a='sign', i="dat3.csv", o="rsl5.csv").run()
2### rsl5.csv の内容
3# id,val,sign
4# 1,10,plus
5# 2,0,zero
6# 3,-5,minus
7# 4,0,zero