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%3ERe%3A%20%EB%AA%A9%EB%A1%9D%EC%97%90%EC%84%9C%20%EC%A0%84%EC%B2%B4%20%EC%97%B4%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%98%EB%B3%B5%ED%95%98%EC%97%AC%20%EB%A7%8C%EB%93%A4%EA%B1%B0%EB%82%98%20%EC%A1%B0%EA%B1%B4%EC%9D%84%20%EC%A7%80%EC%A0%95%ED%95%98%EB%8A%94%20JSL%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-622488%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%3CP%3E%EB%8B%A4%EC%9D%8C%EC%9D%80%20%EC%9D%B4%EB%A5%BC%20%EC%88%98%ED%96%89%ED%95%98%EB%8A%94%20%ED%95%9C%20%EA%B0%80%EC%A7%80%20%EB%B0%A9%EB%B2%95%EC%9D%98%20%EC%98%88%EC%9E%85%EB%8B%88%EB%8B%A4.%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%3ERe%3A%20%EB%AA%A9%EB%A1%9D%EC%97%90%EC%84%9C%20%EC%A0%84%EC%B2%B4%20%EC%97%B4%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%98%EB%B3%B5%ED%95%98%EC%97%AC%20%EB%A7%8C%EB%93%A4%EA%B1%B0%EB%82%98%20%EC%A1%B0%EA%B1%B4%EC%9D%84%20%EC%A7%80%EC%A0%95%ED%95%98%EB%8A%94%20JSL%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-622489%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%3CP%3E%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%9D%B4%EA%B2%83%EC%9D%84%20%EB%B9%8C%EB%93%9C%ED%95%98%EB%8A%94%20%EA%B2%83%EC%9D%80%20%ED%91%9C%ED%98%84%EC%8B%9D%EC%9D%B4%20%EB%A7%A4%EC%9A%B0%20%EA%B0%84%EB%8B%A8%ED%95%98%EA%B8%B0%20%EB%95%8C%EB%AC%B8%EC%97%90%20%EA%B0%80%EC%9E%A5%20%EA%B0%84%EB%8B%A8%ED%95%9C%20%EC%98%B5%EC%85%98%EC%9D%BC%20%EA%B0%80%EB%8A%A5%EC%84%B1%EC%9D%B4%20%EB%86%92%EC%8A%B5%EB%8B%88%EB%8B%A4.%20%ED%95%98%EC%A7%80%EB%A7%8C...%20%EB%82%98%EB%8A%94%20Eval(Parse())%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EA%B2%83%EC%9D%84%20%EC%A2%8B%EC%95%84%ED%95%98%EC%A7%80%20%EC%95%8A%EC%9C%BC%EB%AF%80%EB%A1%9C%20%EC%97%AC%EA%B8%B0%EC%97%90%20%EA%B7%B8%EA%B2%83%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EB%AA%87%20%EA%B0%80%EC%A7%80%20%EC%98%B5%EC%85%98%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4(%EB%91%90%20%EB%B2%88%EC%A7%B8%20%EC%98%B5%EC%85%98%EC%9D%80%20%EB%88%84%EB%9D%BD%EB%90%9C%20%EA%B0%92%EC%9C%BC%EB%A1%9C%20%EC%9B%90%ED%95%98%EB%8A%94%20%EC%9E%91%EC%97%85%EC%9D%84%20%EC%88%98%ED%96%89%ED%95%98%EC%A7%80%20%EC%95%8A%EC%9D%84%20%EC%88%98%20%EC%9E%88%EC%9D%8C).%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%3E%EB%AA%A9%EB%A1%9D%EC%97%90%EC%84%9C%20%EC%A0%84%EC%B2%B4%20%EC%97%B4%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%98%EB%B3%B5%ED%95%98%EC%97%AC%20%EB%A7%8C%EB%93%A4%EA%B1%B0%EB%82%98%20%EC%A1%B0%EA%B1%B4%EC%9D%84%20%EC%A7%80%EC%A0%95%ED%95%98%EB%8A%94%20JSL%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-622464%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%3CP%3E%EC%A3%BC%EC%96%B4%EC%A7%84%20%EC%97%B4%20%EC%9D%B4%EB%A6%84%20%EB%AA%A9%EB%A1%9D%EC%9D%84%20%EC%9E%85%EB%A0%A5%EC%9C%BC%EB%A1%9C%20%EC%82%AC%EC%9A%A9%ED%95%98%EA%B3%A0%20%ED%95%B4%EB%8B%B9%20%EC%97%B4%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20OR%20%EC%A1%B0%EA%B1%B4%EC%9D%84%20%EC%88%98%ED%96%89%ED%95%98%EA%B3%A0%20%ED%95%B4%EB%8B%B9%20%EB%A3%A8%ED%95%91%20OR%20%EC%88%98%EC%8B%9D%EC%9D%B4%20%EC%9E%88%EB%8A%94%20%EC%97%B4%EC%9D%84%20%EC%B6%9C%EB%A0%A5%ED%95%98%EB%8A%94%20%ED%95%A8%EC%88%98%EB%A5%BC%20jsl%EC%97%90%20%EB%A7%8C%EB%93%A4%EA%B3%A0%20%EC%8B%B6%EC%8A%B5%EB%8B%88%EB%8B%A4.%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F%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%EC%9C%84%EC%9D%98%20%EA%B2%BD%EC%9A%B0%20%EC%95%84%EB%9E%98%EC%99%80%20%EA%B0%99%EC%9D%80%20%EA%B8%B0%EB%8A%A5%EC%9D%84%20%EB%A7%8C%EB%93%A4%EA%B3%A0%20%EC%8B%B6%EC%8A%B5%EB%8B%88%EB%8B%A4.%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%ED%92%88%EC%A7%88%20%EB%B0%8F%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%A7%81%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3E%EC%9C%88%EB%8F%84%EC%9A%B0%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