こんにちは、Maveryx!
先週のチャレンジの回答はこちらで見つけることができます。
今週のチャレンジは、コミュニティメンバーAntoBennetsha Jabamalai (@AntobennetshaJ)によって提供されました。データ準備スキルを磨きましょう!Antoさんに感謝します!
ほとんどの方は、日常の業務の中で様々な形式の日付データを扱う作業に遭遇していると思いますが、正直にいうと、プロセスを合理化する前に日付形式を定期的にチェックする人はいないと思います。
このチャレンジでは、調査データセットの一連の日付をクリーニングするタスクに直面します。この日付は文字列型のフィールドに収集されています。これは、調査の回答者がさまざまな形式で日付を入力している、という意味です。その結果、日付に異なる区切り文字や追加の不要な情報が含まれることになりました。調査データを実際に分析するためには、すべての日付を一貫したフォーマット(YYYY-MM-DD)に標準化し、古いものから新しいものまで整理することが重要です。
もう少し手助けが必要ですか? アカデミーにあるインタラクティブレッスン「データを列や行に分割する」では、スラッシュやハイフン、ドットなどの複数の区切り文字やその他の余分の文字を含むデータセット内の値の処理に関しての洞察が得られます。
健闘を祈ります!
回答します。
from | to |
dd | %d |
mm | %m |
yyyy | %Y |
exp | BoolExpression | New Field |
DateTimeParse([Date1],[Date2]) | -1 | Date1 |
出来ました。
ツールゴルフです。並び順さえ気にしなければ、それほど複雑じゃないフォーミュラーツール一発でいけます
SubString([Date Field],FindString([Date Field], "yyyy")-11,4)
+"-"
+SubString([Date Field],FindString([Date Field], "mm")-11,2)
+"-"
+SubString([Date Field],FindString([Date Field], "dd")-11,2)
できました!これは、、、いろいろなやり方がありそうですね!
フォーミュラが手っ取り早いですが、こういうのってクロスタブとか使って作りたくなっちゃいます(結局、3パターン作ってみました)。
IF GetPart([2], "./-", 0)="yyyy" THEN GetPart([1], "./-", 0)
ELSEIF GetPart([2], "./-", 1)="yyyy" THEN GetPart([1], "./-", 1)
ELSE GetPart([1], "./-", 2) ENDIF
+"-"+
IF GetPart([2], "./-", 0)="mm" THEN GetPart([1], "./-", 0)
ELSEIF GetPart([2], "./-", 1)="mm" THEN GetPart([1], "./-", 1)
ELSE GetPart([1], "./-", 2) ENDIF
+"-"+
IF GetPart([2], "./-", 0)="dd" THEN GetPart([1], "./-", 0)
ELSEIF GetPart([2], "./-", 1)="dd" THEN GetPart([1], "./-", 1)
ELSE GetPart([1], "./-", 2) ENDIF
ひたすらReplaceして、DateTimeParseにぶちこむパターン
DateTimeParse(ReplaceChar([1], "./", "-"),ReplaceChar(Replace(Replace(Replace([2], "dd", "%d"),"mm","%m"),"yyyy","%Y"),"./","-"))
似通ってますが3パターン作ってみました。
フォーミュラーでのみ頑張りたくなりがちです