掃描描述大家好!
我想編寫一個公式來掃描Column,Description,拾取各種文本字符串,如果其中一個存在則返回“YES”,如果不存在則返回“NO”。 感興趣的文本字符串只是Column,Description中數據的一部分。 我對所有形式的同樣的東西感興趣,“40盎司”,“40盎司”等。 如果有任何這些,我想返回YES。
我寫了下面的公式,
If(
N Rows/*###*/(Contains(
{"40 oz" ; "40 ounce" ; "40oz" ; "40 Ounce" ; "40 Oz" ;
"40 OZ"},
Empty()
)) > 0,
"Yes",
"NO"
)
但是,JMP為所有行返回NO,即使是我可以看到上面捕獲的描述的行。 有沒有辦法使用“LOCATE”哪個會更好?
謝謝!
回复:掃描描述謝謝!
回复:掃描描述謝謝。 我以前沒有正確輸入或命令。
回复:掃描描述 @llawless
我在您的數據表上使用了相同的腳本,結果如下。

dt = Current Data Table(); // Keep your data table open.
dt << New Column("Test",Character,Continuous,Formula(If( !Is Missing( Regex( Char( :Description ), "oz" ) ) | !Is Missing( Regex( Char( :Description ), "ounce" ) ),:Description,"No Match"))); 回复:掃描描述其他方式:
New Column( "40 oz",
Numeric,
"Nominal",
Format( "Best", 12 ),
Formula( N Items( Regex Match( :Description, "40.*[oO]([zZ]|unce)" ) ) > 1 ),
Value Labels( {0 = "No", 1 = "Yes"} ),
Use Value Labels( 1 ),
Set Display Width( 57 )
);回复:掃描描述我相信我在之前的評論中是正確的。 您的公式需要在每個“OR”語句後具有完整的“Contains()”函數。 我已經附上了我的建議,它似乎做了你想要的。
回复:掃描描述我真的很感謝你的幫助!
我在附件中隱藏了一些數據。 我的真實數據集有更多的行和更長的描述,但我希望這足以給你一個想法。
回复:掃描描述 @llawless ,
我多次閱讀並重新閱讀你的問題,也許你就是在這之後。
這與以前的邏輯基本相同 - 但是,我在列公式中使用它。如果這有幫助,請告訴我。
Clear Log(); Clear Globals();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
DesNames = List();
dt << New Column("Test",Character,Continuous,Formula(If( !Is Missing( Regex( Char( :name ), "AL" ) ) | !Is Missing( Regex( Char( :name ), "MA" ) ),:name,"No Match"))); 回复:掃描描述 @llawless ,
如果您發布樣本數據集,我可以為您提供更多幫助。由於一次不可用,讓我通過JMP中的示例數據集演示我正在做什麼。如果這不能回答你的問題,請分享樣本數據。
Clear Log(); Clear Globals();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
DesNames = List();
NamesList = dt:name << get Values;
for(i = 1 , i <= N Items(NamesList), i++,
If(!IsMissing(Regex(Char(NamesList[i]),"AL"))|!IsMissing(Regex(Char(NamesList[i]),"MA")),
Insert Into(DesNames,NamesList[i]);
);
);
Show(DesNames);
回复:掃描描述是的,我試過了,列沒有返回任何數據。
回复:掃描描述 @llawless ,
dt = Current Data Table();
Col = Column(dt,1); // Replace 1 with the column number of your data table with the data of interest
Vals = Col << Get Values;
DesList = List();
for(i = 1 , i <= N Items(Vals), i++,
If(!IsMissing(Regex(Char(Vals[i]),"oz")) | !IsMissing(Regex(Char(Vals[i]),"ounce")) | !IsMissing(Regex(Char(Vals[i]),"ounce")) | !IsMissing(Regex(Char(Vals[i]),"Oz")),
Insert Into(DesList,Vals[i]);
);
);
Show(DesList); 這是為了解決您掃描行的情況。 你試過這個嗎?
回复:掃描描述嗯,我沒有拿起描述。 您提供的代碼是否僅用於掃描列名稱。 我想掃描已知列下的行。
回复:掃描描述dt = Current Data Table();
ColNames = dt << Get Column Names("string");
DesList = List();
for(i = 1 , i <= N Items(ColNames ), i++,
If(!IsMissing(Regex(Char(ColNames [i]),"oz")) | !IsMissing(Regex(Char(ColNames [i]),"ounce")) | !IsMissing(Regex(Char(ColNames [i]),"ounce")) | !IsMissing(Regex(Char(ColNames [i]),"Oz")),
Insert Into(DesList,ColNames [i]);
);
);
Show(DesList); 您可以使用“獲取列名稱”功能提取列名稱,並使用我提供的代碼
回复:掃描描述我可能錯了,但是你不需要在contains函數里面有一個OR語句嗎?如果我是對的,那麼缺少OR只是尋找整個條目串而不是一次性找到它們。 但我可能錯了。
回复:掃描描述謝謝!
我的意思是列名是描述。 在該列中,我想選擇具有感興趣的文本字符串的行(例如,40盎司)。
回复:掃描描述 @llawless ,
你好,我來試一試。我假設數據是行:
dt = Current Data Table();
Col = Column(dt,1);
Vals = Col << Get Values;
DesList = List();
for(i = 1 , i <= N Items(Vals), i++,
If(!IsMissing(Regex(Char(Vals[i]),"oz")) | !IsMissing(Regex(Char(Vals[i]),"ounce")) | !IsMissing(Regex(Char(Vals[i]),"ounce")) | !IsMissing(Regex(Char(Vals[i]),"Oz")),
Insert Into(DesList,Vals[i]);
);
);
Show(DesList);
如果這些是列名,您只需在上面的代碼中替換並使用它。
ColNames = dt << Get Column Names("String");
我沒有關注你的問題是數據在“列描述”中 - 你的意思是列名嗎?
希望這有幫助 - 否則你可以澄清你的問題或提供樣本數據。