こんにちは。1つの列を3つの新しい列に分割し、元の列の文字列の一部を3つの新しい列の1つに配置しようとしています。テキストの文脈に基づいています。テキストから列へのテキストが区切り文字に基づいて文字列を解析することは理解していますが、これでは必要な場所に到達できません。テキストを読み取り、特定のキーワード(年、月、または日)をチェックしてから、文字列の一部(「年」、「月」、または「日」の前の数値)を適切な列に配置する関数が必要です。 。 word()関数は最初の単語または値を推定でき、これが開始点になりますが、テキストに基づいて3つの潜在的な列のいずれかに値を配置する必要があります。 誰かがこれをコーディングする方法について考えていますか?または、潜在的な回避策のアイデアはありますか?どんな洞察も大歓迎です。
列1が現在の形式のデータを示し、列2〜4が理想的な状態である添付の例。ありがとうございました!
ステファニー
これを処理する1つの方法があります
Names Default To Here( 1 );
dt = New Table( "Example dt",
Add Rows( 10 ),
Set Header Height( 46 ),
New Column( "Age",
Character,
"Nominal",
Set Selected,
Set Values(
{"2-day old", "43-day old", "3-day old",
"3-month old", "4-month old", "5-day old",
"32-day old", "13-year old", "10-year old",
"10-month old"}
)
)
);
dt << New Column( "AgeYears" );
dt << New Column( "AgeMonths" );
dt << New Column( "AgeDays" );
For( i = 1, i <= N Rows( dt ), i++,
Match( Word( 2, :Age[i], "- " ),
"day",
:AgeDays[i] =
Num( Word( 1, :age[i], "- " ) ),
"month",
:AgeMonths[i] =
Num( Word( 1, :age[i], "- " ) ),
"year",
:AgeMonths[i] =
Num( Word( 1, :age[i], "- " ) )
)
);これはとても素晴らしいです、ありがとう@txnelson !このコードにより、データのクリーンアップにかかる時間が大幅に短縮されます。ご回答いただきありがとうございます。 簡単な質問:新しい変数を作成してから元のdtにマージするのではなく、新しい変数を既存のdtに直接埋め込む方法はありますか?
ステファニー
良いキャッチ@Thierry_S 。ありがとうございました !