cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Discussions

Solve problems, and share tips and tricks with other JMP users.
%3CLINGO-SUB%20id%3D%22lingo-sub-485960%22%20slang%3D%22zh-CN%22%20mode%3D%22NONE%22%3E%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%80%81%E7%95%B0%E3%81%AA%E3%82%8B%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E5%90%8C%E3%81%98%E6%96%87%E5%AD%97%E6%95%B0%E3%82%92%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%80%82%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-485960%22%20slang%3D%22zh-CN%22%20mode%3D%22NONE%22%3E%3CP%3E%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%80%81%E9%A0%86%E5%BA%8F%E3%81%AB%E9%96%A2%E4%BF%82%E3%81%AA%E3%81%8F%E3%80%81%E3%83%87%E3%83%BC%E3%82%BF%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E5%86%85%E5%AE%B9%E3%81%A82%E7%95%AA%E7%9B%AE%E3%81%AE%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E5%86%85%E5%AE%B9%E3%81%AB%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8B%E6%96%87%E5%AD%97%E6%95%B0%E3%82%92%E9%81%94%E6%88%90%E3%81%97%E3%80%81%E6%9C%80%E3%82%82%E4%B8%80%E8%87%B4%E3%81%99%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%8C%81%E3%81%A42%E7%95%AA%E7%9B%AE%E3%81%AE%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E8%A1%8C%E7%95%AA%E5%8F%B7%E3%82%92%E8%BF%94%E3%81%99%E6%96%B9%E6%B3%95%E3%80%82%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%E5%8D%98%E7%B4%94%E3%81%AA%E3%83%AB%E3%83%BC%E3%83%97%E6%AF%94%E8%BC%83%E3%81%AE%E3%81%BF%E3%82%92%E8%A8%98%E8%BF%B0%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%E6%AF%94%E8%BC%83%E3%81%99%E3%82%8B%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E6%95%B0%E3%81%8C%E5%A4%9A%E3%81%84%E5%A0%B4%E5%90%88%E3%80%81%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E9%80%9F%E3%81%8F%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%E3%80%82%3C%2FP%3E%3CP%3E%E3%81%82%E3%82%8A%E3%81%8C%E3%81%A8%E3%81%86%EF%BC%81%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-485960%22%20slang%3D%22zh-CN%22%20mode%3D%22NONE%22%3E%3CLINGO-LABEL%3E%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-485963%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3ERe%EF%BC%9A%E6%80%8E%E7%9A%84%E7%94%A8%E8%84%9A%E6%9C%AC%E8%AE%A1%E8%A8%88%E7%AE%97%E4%B8%8D%E5%90%8C%E6%96%87%E5%AD%97%E5%88%97%E4%B8%B2%E4%B8%AD%E5%AD%97%E6%96%87%E5%AD%97%E5%88%97%E7%9A%84%E3%81%A8%E3%80%82%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-485963%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%3CP%3E%E4%BE%8B%E3%81%88%E3%81%B0%E3%80%81%3C%2FP%3E%3CP%3E%E6%9C%80%E5%88%9D%E3%81%AE%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%3C%2FP%3E%3CPRE%3E%3CCODE%20class%3D%22%20language-jsl%22%3E%22KDBAC%22%0A%22FLGHEK%22%0A%22ONLCQR%22%0A%22WVTZXR%22%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E2%E7%95%AA%E7%9B%AE%E3%81%AE%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%3C%2FP%3E%3CPRE%3E%3CCODE%20class%3D%22%20language-jsl%22%3E%22ROMNLQ%22%0A%22DFBACE%22%0A%22LKGHJK%22%0A%22WVTZYX%22%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-486035%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3ERe%EF%BC%9A%E6%80%8E%E7%9A%84%E7%94%A8%E8%84%9A%E6%9C%AC%E8%AE%A1%E8%A8%88%E7%AE%97%E4%B8%8D%E5%90%8C%E6%96%87%E5%AD%97%E5%88%97%E4%B8%B2%E4%B8%AD%E5%AD%97%E6%96%87%E5%AD%97%E5%88%97%E7%9A%84%E3%81%A8%E3%80%82%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-486035%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%222022-05-11_21-28-12.png%22%20style%3D%22width%3A%20414px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%222022-05-11_21-28-12.png%22%20style%3D%22width%3A%20414px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%222022-05-11_21-28-12.png%22%20style%3D%22width%3A%20414px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.jmp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F42375iF68A6E9FA25D6DF5%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%222022-05-11_21-28-12.png%22%20alt%3D%222022-05-11_21-28-12.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-486128%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERe%3A%20%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%80%81%E7%95%B0%E3%81%AA%E3%82%8B%E6%96%87%E5%AD%97%E5%88%97%E5%86%85%E3%81%AE%E5%90%8C%E4%B8%80%E6%96%87%E5%AD%97%E3%81%AE%E6%95%B0%E3%82%92%E6%95%B0%E3%81%88%E3%82%8B%E6%96%B9%E6%B3%95%E3%80%82%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-486128%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E9%87%8D%E8%A4%87%E3%81%8C%E8%A8%B1%E5%8F%AF%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%E3%80%81%E9%80%A3%E6%83%B3%E9%85%8D%E5%88%97%E3%81%A8%E3%81%9D%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E6%93%8D%E4%BD%9C%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%BF%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%3C%2FP%3E%0A%3CPRE%3E%3CCODE%20class%3D%22%20language-jsl%22%3ENames%20Default%20To%20Here(1)%3B%0A%0Adt%20%3D%20New%20Table(%22demo%22%2C%0A%09Add%20Rows(4)%2C%0A%09New%20Column(%22A%22%2C%20Character%2C%20%22Nominal%22%2C%20Set%20Values(%7B%22KDBAC%22%2C%20%22FLGHEK%22%2C%20%22ONLCQR%22%2C%20%22WVTZXR%22%7D))%2C%0A%09New%20Column(%22B%22%2C%20Character%2C%20%22Nominal%22%2C%20Set%20Values(%7B%22ROMNLQ%22%2C%20%22DFBACE%22%2C%20%22LKGHJK%22%2C%20%22WVTZYX%22%7D))%0A)%3B%0A%0A%2F%2F%20Create%20lookup%20associative%20array%2C%20with%20row%20number%20as%20key%20and%20value%20as%20associative%20array%20with%20%0A%2F%2F%20keys%20as%20characters%20in%20row.%20This%20will%20be%20used%20in%20union%20operations%0Aaa_lookup%20%3D%20Associative%20Array()%3B%0AFor%20Each(%7Bval%2C%20idx%7D%2C%20dt%3AB%20%26lt%3B%26lt%3B%20get%20values%2C%0A%09aa_lookup%5Bidx%5D%20%3D%20Associative%20Array(Eval%20List(Words(val%2C%20%22%22)))%3B%0A)%3B%0A%0A%2F%2F%20Create%20collection%20column%0Adt%20%26lt%3B%26lt%3B%20New%20Column(%22C%22%2C%20Numeric%2C%20Continuous)%3B%0A%0AFor%20Each%20Row(dt%2C%0A%09best_match%20%3D%200%3B%0A%09max_row%20%3D%20.%3B%0A%09For%20Each(%7B%7Bkey%2C%20val%7D%7D%2C%20aa_lookup%2C%0A%09%09cur_aa%20%3D%20Associative%20Array(Eval%20List(Words(%3AA%2C%20%22%22)))%3B%0A%09%09cur_aa%20%26lt%3B%26lt%3B%20Intersect(val)%3B%0A%09%09cur_match%20%3D%20N%20Items(cur_aa)%3B%0A%09%09If(cur_match%20%26gt%3B%20best_match%2C%0A%09%09%09best_match%20%3D%20cur_match%3B%09%0A%09%09%09max_row%20%3D%20key%3B%0A%09%09)%3B%0A%09)%3B%0A%09%3AC%20%3D%20max_row%3B%0A)%3B%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22jthi_0-1652283682820.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22jthi_0-1652283682820.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.jmp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F42380iCFA28702829544FF%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22jthi_0-1652283682820.png%22%20alt%3D%22jthi_0-1652283682820.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%20%3C%2FP%3E%3C%2FLINGO-BODY%3E
Choose Language Hide Translation Bar
lala
Level IX

怎样用脚本计算不同字符串中字符相同的个数。

怎样用脚本实现将数据表的内容与第二个表中内容匹配的字符数量,不考虑顺序 、相符合数据最多的返回第二个表的行号。

 

我只会编写简单的循环比较。

如果要比较的字符串数量很多时、怎样才能较快速。

谢谢!

1 ACCEPTED SOLUTION

Accepted Solutions
jthi
Super User

Re: 怎样用脚本计算不同字符串中字符相同的个数。

If no duplication is allowed you could try using associative arrays and their set operations:

Names Default To Here(1);

dt = New Table("demo",
	Add Rows(4),
	New Column("A", Character, "Nominal", Set Values({"KDBAC", "FLGHEK", "ONLCQR", "WVTZXR"})),
	New Column("B", Character, "Nominal", Set Values({"ROMNLQ", "DFBACE", "LKGHJK", "WVTZYX"}))
);

// Create lookup associative array, with row number as key and value as associative array with 
// keys as characters in row. This will be used in union operations
aa_lookup = Associative Array();
For Each({val, idx}, dt:B << get values,
	aa_lookup[idx] = Associative Array(Eval List(Words(val, "")));
);

// Create collection column
dt << New Column("C", Numeric, Continuous);

For Each Row(dt,
	best_match = 0;
	max_row = .;
	For Each({{key, val}}, aa_lookup,
		cur_aa = Associative Array(Eval List(Words(:A, "")));
		cur_aa << Intersect(val);
		cur_match = N Items(cur_aa);
		If(cur_match > best_match,
			best_match = cur_match;	
			max_row = key;
		);
	);
	:C = max_row;
);

jthi_0-1652283682820.png

 

-Jarmo

View solution in original post

6 REPLIES 6
lala
Level IX

Re: 怎样用脚本计算不同字符串中字符相同的个数。

For example,

string for the first table

"KDBAC"
"FLGHEK"
"ONLCQR"
"WVTZXR"

 

String for the second table

"ROMNLQ"
"DFBACE"
"LKGHJK"
"WVTZYX"
lala
Level IX

Re: 怎样用脚本计算不同字符串中字符相同的个数。

2022-05-11_21-28-12.png

jthi
Super User

Re: 怎样用脚本计算不同字符串中字符相同的个数。

Can there be duplicated characters in the strings?

-Jarmo
jthi
Super User

Re: 怎样用脚本计算不同字符串中字符相同的个数。

If no duplication is allowed you could try using associative arrays and their set operations:

Names Default To Here(1);

dt = New Table("demo",
	Add Rows(4),
	New Column("A", Character, "Nominal", Set Values({"KDBAC", "FLGHEK", "ONLCQR", "WVTZXR"})),
	New Column("B", Character, "Nominal", Set Values({"ROMNLQ", "DFBACE", "LKGHJK", "WVTZYX"}))
);

// Create lookup associative array, with row number as key and value as associative array with 
// keys as characters in row. This will be used in union operations
aa_lookup = Associative Array();
For Each({val, idx}, dt:B << get values,
	aa_lookup[idx] = Associative Array(Eval List(Words(val, "")));
);

// Create collection column
dt << New Column("C", Numeric, Continuous);

For Each Row(dt,
	best_match = 0;
	max_row = .;
	For Each({{key, val}}, aa_lookup,
		cur_aa = Associative Array(Eval List(Words(:A, "")));
		cur_aa << Intersect(val);
		cur_match = N Items(cur_aa);
		If(cur_match > best_match,
			best_match = cur_match;	
			max_row = key;
		);
	);
	:C = max_row;
);

jthi_0-1652283682820.png

 

-Jarmo
lala
Level IX

Re: 怎样用脚本计算不同字符串中字符相同的个数。

JMP Pro 15.2,

Thank jthi!

2022-05-12_08-54-42.png

jthi
Super User

Re: 怎样用脚本计算不同字符串中字符相同的个数。

If you are using JMP15 you have to change For Each to For-loop.

-Jarmo

Recommended Articles