cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Try the Materials Informatics Toolkit, which is designed to easily handle SMILES data. This and other helpful add-ins are available in the JMP® Marketplace
%3CLINGO-SUB%20id%3D%22lingo-sub-622488%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9A%E9%80%9A%E8%BF%87%E5%BE%AA%E7%8E%AF%E5%88%97%E8%A1%A8%E4%B8%AD%E7%9A%84%E5%AE%8C%E6%95%B4%E5%88%97%E5%90%8D%E6%9D%A5%E5%88%9B%E5%BB%BA%E6%88%96%E8%B0%83%E8%8A%82%E7%9A%84%20JSL%20%E8%84%9A%E6%9C%AC%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-622488%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%3CP%3E%E8%BF%99%E6%98%AF%E4%B8%80%E7%A7%8D%E6%96%B9%E6%B3%95%E7%9A%84%E7%A4%BA%E4%BE%8B......%E5%85%B6%E4%BB%96%E4%BA%BA%E5%8F%AF%E8%83%BD%E6%9C%89%E6%9B%B4%E9%9B%84%E8%BE%A9%E7%9A%84%E6%96%B9%E6%B3%95%3C%2FP%3E%0A%3CPRE%3E%3CCODE%20class%3D%22%20language-jsl%22%3ENames%20Default%20To%20Here(%201%20)%3B%0Adt%20%3D%20%0A%2F%2F%20Open%20Data%20Table%3A%20Big%20Class.jmp%0A%2F%2F%20%E2%86%92%20Data%20Table(%20%22Big%20Class%22%20)%0AOpen(%20%22%24SAMPLE_DATA%2FBig%20Class.jmp%22%20)%3B%0A%0Amy_func%20%3D%20Function(%20%7Binput_dt%2C%20input_col_list%2C%20x%7D%2C%0A%20%7Binput_dt%2C%20input_col_list%2C%20x%2C%20the_cmd%7D%2C%0A%20input_dt%20%26lt%3B%26lt%3B%20New%20Column(%20%22d%22%20)%3B%0A%20current%20data%20table(input_dt)%3B%0A%20the_cmd%20%3D%20%22current%20data%20table()%3Ad%20%26lt%3B%26lt%3B%20set%20formula(%20If(%20%20current%20data%20table()%3A%5C!%22%22%20%7C%7C%0A%20Char(%20input_col_list%5B1%5D%20)%20%7C%7C%20%22%5C!%22n%20%26gt%3B%3D%20%22%20%7C%7C%20Char(%20x%20)%3B%0A%20For(%20i%20%3D%202%2C%20i%20%26lt%3B%3D%20N%20Items(%20input_col_list%20)%2C%20i%2B%2B%2C%0A%20%20the_cmd%20%3D%20the_cmd%20%7C%7C%20%22%20%7C%20current%20data%20table()%3A%5C!%22%22%20%7C%7C%20Char(%20input_col_list%5Bi%5D%20)%20%7C%7C%20%22%5C!%22n%20%26gt%3B%3D%20%22%0A%20%20%20%7C%7C%20Char(%20x%20)%0A%20)%3B%0A%20the_cmd%20%3D%20the_cmd%20%7C%7C%20%22%2C%201%2C%200)%20)%3B%22%3B%0A%20Eval(%20Parse(%20the_cmd%20)%20)%3B%0A)%3B%0A%0Ainput_col_listx%20%3D%20%7B%22Height%22%2C%20weight%7D%3B%0Adtx%20%3D%20Data%20Table(%20%22big%20class%22%20)%3B%0Axx%20%3D%20101%3B%0A%0AtheReturn%20%3D%20my_func(%20dtx%2C%20input_col_listx%2C%20xx%20)%3B%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-622489%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%E5%9B%9E%E5%A4%8D%EF%BC%9A%E9%80%9A%E8%BF%87%E5%BE%AA%E7%8E%AF%E5%88%97%E8%A1%A8%E4%B8%AD%E7%9A%84%E5%AE%8C%E6%95%B4%E5%88%97%E5%90%8D%E6%9D%A5%E5%88%9B%E5%BB%BA%E6%88%96%E8%B0%83%E8%8A%82%E7%9A%84%20JSL%20%E8%84%9A%E6%9C%AC%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-622489%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%3CP%3E%E4%BD%BF%E7%94%A8%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%9E%84%E5%BB%BA%E5%AE%83%E5%BE%88%E5%8F%AF%E8%83%BD%E6%98%AF%E6%9C%80%E7%AE%80%E5%8D%95%E7%9A%84%E9%80%89%E9%A1%B9%EF%BC%8C%E5%9B%A0%E4%B8%BA%E8%A1%A8%E8%BE%BE%E5%BC%8F%E9%9D%9E%E5%B8%B8%E7%AE%80%E5%8D%95%E3%80%82%20%E4%BD%86...%20%E6%88%91%E4%B8%8D%E5%96%9C%E6%AC%A2%E4%BD%BF%E7%94%A8%20Eval(Parse())%20%E6%89%80%E4%BB%A5%E8%BF%99%E9%87%8C%E6%9C%89%E5%87%A0%E4%B8%AA%E9%80%89%E9%A1%B9%E6%B2%A1%E6%9C%89%E4%BD%BF%E7%94%A8%E5%AE%83%EF%BC%88%E7%AC%AC%E4%BA%8C%E4%B8%AA%E9%80%89%E9%A1%B9%E5%8F%AF%E8%83%BD%E4%B8%8D%E4%BC%9A%E5%81%9A%E4%BD%A0%E6%83%B3%E8%A6%81%E7%9A%84%E7%BC%BA%E5%A4%B1%E5%80%BC%EF%BC%89%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(%22Untitled%203%22%2C%0A%20Add%20Rows(0)%2C%0A%20Compress%20File%20When%20Saved(1)%2C%0A%20New%20Column(%22a%22%2C%20Numeric%2C%20%22Continuous%22%2C%20Format(%22Best%22%2C%2012)%2C%20Set%20Values(%5B0%2C1%5D))%2C%0A%20New%20Column(%22b%22%2C%20Numeric%2C%20%22Continuous%22%2C%20Format(%22Best%22%2C%2012)%2C%20Set%20Values(%5B0%2C0%5D))%2C%0A%20New%20Column(%22c%22%2C%20Numeric%2C%20%22Continuous%22%2C%20Format(%22Best%22%2C%2012)%2C%20Set%20Values(%5B0%2C0%5D))%0A)%3B%0Ainput_col_list%20%3D%20%7B%22a%22%2C%20%22b%22%2C%20%22c%22%7D%3B%0Ax%20%3D%200.1%3B%0A%0A%2F%2F%20using%20Or%0Aor_expr%20%3D%20Expr(Or())%3B%0A%2F%2F%20https%3A%2F%2Fcommunity.jmp.com%2Ft5%2FJSL-Cookbook-Archived%2FInsert-one-expression-into-another-using-Eval-Insert-Eval-Expr%2Fta-p%2F48998%0AFor%20Each(%7Bcol_name%7D%2C%20input_col_list%2C%0A%20col_expr%20%3D%20Substitute(%0A%20%20expr(_col_ref_%20%26gt%3B%3D%20_comparison_value_)%2C%0A%20%20Expr(_col_ref_)%2C%20NameExpr(AsColumn(Column(dt%2C%20col_name)))%2C%0A%20%20Expr(_comparison_value_)%2C%20x%0A%20)%3B%0A%20Insert%20Into(or_expr%2C%20Name%20Expr(col_expr))%3B%0A)%3B%0A%2F%2F%20Show(name%20expr(or_expr))%3B%0AEval(EvalExpr(dt%20%26lt%3B%26lt%3B%20New%20Column(%22d%22%2C%20Numeric%2C%20Continuous%2C%20Formula(%0A%20If(Expr(name%20expr(or_expr))%2C%201%2C%200)%0A))))%3B%0A%0A%0A%2F%2F%20using%20matrix%20and%20any%0Acol_refs%20%3D%20Transform%20Each(%7Bcol_name%7D%2C%20input_col_list%2C%0A%20Name%20Expr(As%20Column(Column(dt%2C%20col_name)))%3B%0A)%3B%0AEval(EvalExpr(dt%20%26lt%3B%26lt%3B%20New%20Column(%22d%22%2C%20Numeric%2C%20Continuous%2C%20Formula(%0A%20Any(Matrix(Expr(col_refs))%20%26gt%3B%3D%20Expr(x))%0A))))%3B%0A%0A%0A%2F%2F%20function%20of%20second%20option%0Acreate_check_col%20%3D%20function(%7Bdt%2C%20col_input%2C%20limit_val%7D%2C%20%7BDefault%20Local%7D%2C%0A%20col_refs%20%3D%20Transform%20Each(%7Bcol_name%7D%2C%20col_input%2C%0A%20%20Name%20Expr(As%20Column(Column(dt%2C%20col_name)))%3B%0A%20)%3B%0A%20%0A%20new_col%20%3D%20Eval(EvalExpr(dt%20%26lt%3B%26lt%3B%20New%20Column(%22d%22%2C%20Numeric%2C%20Continuous%2C%20Formula(%0A%20%20Any(Matrix(Expr(col_refs))%20%26gt%3B%3D%20Expr(limit_val))%0A%20))))%3B%0A%20%0A%20return(new_col)%3B%0A)%3B%0Acreate_check_col(dt%2C%20input_col_list%2C%20x)%3B%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-622464%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3EJSL%20%E8%84%9A%E6%9C%AC%E9%80%9A%E8%BF%87%E5%BE%AA%E7%8E%AF%E5%88%97%E8%A1%A8%E4%B8%AD%E7%9A%84%E5%AE%8C%E6%95%B4%E5%88%97%E5%90%8D%E7%A7%B0%E6%9D%A5%E5%88%9B%E5%BB%BA%E6%88%96%E6%9D%A1%E4%BB%B6%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-622464%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%3CP%3E%E6%88%91%E6%83%B3%E5%9C%A8%20jsl%20%E4%B8%AD%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%87%BD%E6%95%B0%EF%BC%8C%E5%AE%83%E5%B0%86%E7%BB%99%E5%AE%9A%E7%9A%84%E5%88%97%E5%90%8D%E5%88%97%E8%A1%A8%E4%BD%9C%E4%B8%BA%E8%BE%93%E5%85%A5%EF%BC%8C%E4%BD%BF%E7%94%A8%E8%BF%99%E4%BA%9B%E5%88%97%E6%89%A7%E8%A1%8C%20OR%20%E6%9D%A1%E4%BB%B6%EF%BC%8C%E5%B9%B6%E8%BE%93%E5%87%BA%E5%85%B7%E6%9C%89%E8%AF%A5%E5%BE%AA%E7%8E%AF%20OR%20%E5%85%AC%E5%BC%8F%E7%9A%84%E5%88%97%E3%80%82%20%E4%BD%A0%E6%98%AF%E6%80%8E%E4%B9%88%E5%81%9A%E5%88%B0%E7%9A%84%EF%BC%9F%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%3E%3CCODE%20class%3D%22%20language-jsl%22%3Einput_col_list%20%3D%20%7B%20%22a%22%2C%20%22b%22%2C%20%22c%22%7D%3B%0Ainput_dt%20%3D%20dt%3B%0Ax%20%3D%200.1%3B%0Ainput_dt%20%26lt%3B%26lt%3B%20New%20Column(%22d%22%2C%20numeric%2C%20continuous%2C%20%0Aformula%20(%20%0AIf(%0A(As%20Column(%22a%22)%20%26gt%3B%3D%20x%20%20%7C%20%20As%20Column(%22b%22)%20%26gt%3B%3D%20x%20%20%7C%20As%20Column(%22c%22)%20%26gt%3B%3D%20%20x)%2C%20%0A1%2C%0A0%0A)%20%0A))%3B%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%E5%AF%B9%E4%BA%8E%E4%B8%8A%E9%9D%A2%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%8C%E6%88%91%E6%83%B3%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%A6%82%E4%B8%8B%E6%89%80%E7%A4%BA%E7%9A%84%E5%87%BD%E6%95%B0%EF%BC%9A%3C%2FP%3E%3CPRE%3E%3CCODE%20class%3D%22%20language-jsl%22%3Emy_func%20%3D%0AFunction(%0A%7Binput_dt%2C%20input_col_list%2C%20x%7D%2C%0A%7B%2F%2Flocal%20var%7D%2C%0A%2F%2F%20function%20body%0A...%0AReturn%20As%20column(%22d%22)%0A)%3B%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-622464%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%3CLINGO-LABEL%3E%E8%B4%A8%E9%87%8F%E5%92%8C%E5%B7%A5%E8%89%BA%E5%B7%A5%E7%A8%8B%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3E%E8%A7%86%E7%AA%97%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
Choose Language Hide Translation Bar

JSL script to create or condition by looping thorough column names in a list

I'd like to create a function in jsl that takes a given list of column names as input, uses those columns to do a OR condition, and outputs a column with that looping OR formula. How do U do that? 

 

input_col_list = { "a", "b", "c"};
input_dt = dt;
x = 0.1;
input_dt << New Column("d", numeric, continuous, 
formula ( 
If(
(As Column("a") >= x  |  As Column("b") >= x  | As Column("c") >=  x), 
1,
0
) 
));

For above, I would like to make a function like below: 

my_func =
Function(
{input_dt, input_col_list, x},
{//local var},
// function body
...
Return As column("d")
);
1 ACCEPTED SOLUTION

Accepted Solutions
txnelson
Super User

Re: JSL script to create or condition by looping thorough column names in a list

Here is an example of one way to do it.......others may have more eloquent ways

Names Default To Here( 1 );
dt = 
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );

my_func = Function( {input_dt, input_col_list, x},
	{input_dt, input_col_list, x, the_cmd},
	input_dt << New Column( "d" );
	current data table(input_dt);
	the_cmd = "current data table():d << set formula( If(  current data table():\!"" ||
	Char( input_col_list[1] ) || "\!"n >= " || Char( x );
	For( i = 2, i <= N Items( input_col_list ), i++,
		the_cmd = the_cmd || " | current data table():\!"" || Char( input_col_list[i] ) || "\!"n >= "
		 || Char( x )
	);
	the_cmd = the_cmd || ", 1, 0) );";
	Eval( Parse( the_cmd ) );
);

input_col_listx = {"Height", weight};
dtx = Data Table( "big class" );
xx = 101;

theReturn = my_func( dtx, input_col_listx, xx );

 

Jim

View solution in original post

2 REPLIES 2
txnelson
Super User

Re: JSL script to create or condition by looping thorough column names in a list

Here is an example of one way to do it.......others may have more eloquent ways

Names Default To Here( 1 );
dt = 
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );

my_func = Function( {input_dt, input_col_list, x},
	{input_dt, input_col_list, x, the_cmd},
	input_dt << New Column( "d" );
	current data table(input_dt);
	the_cmd = "current data table():d << set formula( If(  current data table():\!"" ||
	Char( input_col_list[1] ) || "\!"n >= " || Char( x );
	For( i = 2, i <= N Items( input_col_list ), i++,
		the_cmd = the_cmd || " | current data table():\!"" || Char( input_col_list[i] ) || "\!"n >= "
		 || Char( x )
	);
	the_cmd = the_cmd || ", 1, 0) );";
	Eval( Parse( the_cmd ) );
);

input_col_listx = {"Height", weight};
dtx = Data Table( "big class" );
xx = 101;

theReturn = my_func( dtx, input_col_listx, xx );

 

Jim
jthi
Super User

Re: JSL script to create or condition by looping thorough column names in a list

Building this using strings is most likely most simple option as the expression is quite simple one. But... I don't like using Eval(Parse()) so here are few options which are not using that (second option might not do what you want with missing values)

Names Default To Here(1);

dt = New Table("Untitled 3",
	Add Rows(0),
	Compress File When Saved(1),
	New Column("a", Numeric, "Continuous", Format("Best", 12), Set Values([0,1])),
	New Column("b", Numeric, "Continuous", Format("Best", 12), Set Values([0,0])),
	New Column("c", Numeric, "Continuous", Format("Best", 12), Set Values([0,0]))
);
input_col_list = {"a", "b", "c"};
x = 0.1;

// using Or
or_expr = Expr(Or());
// https://community.jmp.com/t5/JSL-Cookbook-Archived/Insert-one-expression-into-another-using-Eval-Insert-Eval-Expr/ta-p/48998
For Each({col_name}, input_col_list,
	col_expr = Substitute(
		expr(_col_ref_ >= _comparison_value_),
		Expr(_col_ref_), NameExpr(AsColumn(Column(dt, col_name))),
		Expr(_comparison_value_), x
	);
	Insert Into(or_expr, Name Expr(col_expr));
);
// Show(name expr(or_expr));
Eval(EvalExpr(dt << New Column("d", Numeric, Continuous, Formula(
	If(Expr(name expr(or_expr)), 1, 0)
))));


// using matrix and any
col_refs = Transform Each({col_name}, input_col_list,
	Name Expr(As Column(Column(dt, col_name)));
);
Eval(EvalExpr(dt << New Column("d", Numeric, Continuous, Formula(
	Any(Matrix(Expr(col_refs)) >= Expr(x))
))));


// function of second option
create_check_col = function({dt, col_input, limit_val}, {Default Local},
	col_refs = Transform Each({col_name}, col_input,
		Name Expr(As Column(Column(dt, col_name)));
	);
	
	new_col = Eval(EvalExpr(dt << New Column("d", Numeric, Continuous, Formula(
		Any(Matrix(Expr(col_refs)) >= Expr(limit_val))
	))));
	
	return(new_col);
);
create_check_col(dt, input_col_list, x);
-Jarmo