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-40768%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3EBenutzerdefinierte%20Funktion%3A%20So%20%C3%BCbergeben%20Sie%20den%20Wert%20einer%20Ausgabevariable%20an%20eine%20andere%20Variable%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-40768%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%3CP%3EHallo%2C%20ich%20erstelle%20einen%20Code%2C%20der%20Benutzereingaben%20validiert.%20Die%20Benutzereingabe%20erfolgt%20%C3%BCber%20zwei%20Listen%2C%20B%20und%20C.%20Die%20Ausgabe%20ist%20Liste%20A%2C%20die%20alle%20Elemente%20enth%C3%A4lt%2C%20die%20sowohl%20in%20B%20als%20auch%20in%20C%20enthalten%20sind.%20Hier%20ist%20der%20Code%3A%3C%2FP%3E%3CPRE%3E%3CCODE%20class%3D%22%20language-jsl%22%3E%2F%2FCHECK%20IF%20USER%20INPUT%20MAKES%20SENSE%20%0ACaption(%22Checking%20input%20data...%22)%3B%0Acol_name_list%20%3D%20dt%20%26lt%3B%26lt%3B%20get%20column%20names(%20string%20)%3B%0A%0A%2F%2FCheck%20if%20there%20are%20duplicate%20or%20missing%20inputs%0A%2F%2FCreate%20a%20User-Defined%20Function%0AColCheck%3DFunction(%7Bmain%2C%20second%7D%2C%20%7Bduplicate%7D%2C%0A%20(duplicate%3D%7B%7D%3B%20%20Show%20(duplicate)%3B%0A%20For%20(i%3D1%2C%20i%26lt%3B%3DNitems(main)%2C%20i%2B%2B%2C%0A%20%20%20%2F%2FCheck%20if%20there%20are%20missing%20columns%20from%20user%20input%0A%20%20%20If%20(%20!Contains(%20col_name_list%2C%20main%5Bi%5D%20)%2C%0A%20%20%20%20%20Write(%22WARNING!%20Column%20%22%20%7C%7C%20main%5Bi%5D%20%7C%7C%22%20does%20not%20exists.%20Creating%20data%20column.%22)%3B%0A%20%20%20%20%20Caption(%22WARNING!%20Column%20%22%20%7C%7C%20main%5Bi%5D%20%7C%7C%22%20does%20not%20exists.%20Creating%20data%20column.%22)%3B%0A%20%20%20%20%20Wait(%201%20)%3B%0A%20%20%20%20%20script1%20%3D%20%22dt%26lt%3B%3CNEW%20column%3D%22%22%3E%3C%2FNEW%3E%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3EHier%20ist%20die%20Ausgabe%3A%3C%2FP%3E%3CPRE%3E%3CCODE%20class%3D%22%20language-jsl%22%3EA%20%3D%20%7B%7D%3B%0Aduplicate%20%3D%20%7B%7D%3B%0Aduplicate%20%3D%20%7B%22two%22%7D%3B%0Aduplicate%20%3D%20%7B%22two%22%2C%20%22three%22%7D%3B%0AA%20%3D%20.%3B%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3EDie%20Funktion%20funktioniert%2C%20wie%20aus%20den%20Werten%20der%20%E2%80%9Edoppelten%E2%80%9C%20Variablen%20hervorgeht.Das%20Problem%20ist%20folgendes%3A%20Der%20doppelte%20Inhalt%20kann%20nicht%20an%20die%20Variable%20%E2%80%9EA%E2%80%9C%20%C3%BCbergeben%20werden.%20Stimmt%20etwas%20mit%20meinem%20Code%20nicht%3F%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-41049%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3EBetreff%3A%20Benutzerdefinierte%20Funktion%3A%20So%20%C3%BCbergeben%20Sie%20den%20Wert%20einer%20Ausgabevariable%20an%20eine%20andere%20Variable%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-41049%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%3CP%3EDanke%2C%20Jim.%20Es%20funktioniert%20jetzt.%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EAm%20besten%2C%3C%2FP%3E%3CP%3EShaira%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-40780%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3EBetreff%3A%20Benutzerdefinierte%20Funktion%3A%20So%20%C3%BCbergeben%20Sie%20den%20Wert%20einer%20Ausgabevariable%20an%20eine%20andere%20Variable%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-40780%22%20slang%3D%22en-US%22%20mode%3D%22NONE%22%3E%3CP%3EWas%20von%20einer%20JMP-Funktion%20oder%20einem%20JMP-Format%20zur%C3%BCckgegeben%20wird%2C%20ist%20der%20zuletzt%20verarbeitete%20Wert.%20Wenn%20Sie%20also%20%E2%80%9Eduplicate%E2%80%9C%20als%20letztes%20Element%20hinzuf%C3%BCgen%2C%20funktioniert%20es%20hervorragend.%3C%2FP%3E%0A%3CPRE%3E%3CCODE%20class%3D%22%20language-jsl%22%3EColCheck%20%3D%20Function(%20%7Bmain%2C%20second%7D%2C%0A%20%7Bduplicate%7D%2C%0A%20duplicate%20%3D%20%7B%7D%3B%0A%20Show(%20duplicate%20)%3B%0A%20For(%20i%20%3D%201%2C%20i%20%26lt%3B%3D%20N%20Items(%20main%20)%2C%20i%2B%2B%2C%20%0A%20%20%20%2F%2FCheck%20if%20there%20are%20missing%20columns%20from%20user%20input%0A%20%20If(%20!Contains(%20col_name_list%2C%20main%5Bi%5D%20)%2C%0A%20%20%20Write(%20%22WARNING!%20Column%20%22%20%7C%7C%20main%5Bi%5D%20%7C%7C%20%22%20does%20not%20exists.%20Creating%20data%20column.%22%20)%3B%0A%20%20%20Caption(%20%22WARNING!%20Column%20%22%20%7C%7C%20main%5Bi%5D%20%7C%7C%20%22%20does%20not%20exists.%20Creating%20data%20column.%22%20)%3B%0A%20%20%20Wait(%201%20)%3B%0A%20%20%20script1%20%3D%20%22dt%26lt%3B%3CNEW%20column%3D%22%22%3E%3C%2FNEW%3E%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FLINGO-BODY%3E
Choose Language Hide Translation Bar
shaira
Level IV

User-Defined Function: How to pass output variable value to another variable

Hi, I am making a code that validates user input. The user input are two lists, B and C. The output is list A, which contains all the items that are contained in both B and C. Here is the code:

//CHECK IF USER INPUT MAKES SENSE 
Caption("Checking input data...");
col_name_list = dt << get column names( string );

//Check if there are duplicate or missing inputs
//Create a User-Defined Function
ColCheck=Function({main, second}, {duplicate},
	(duplicate={};  Show (duplicate);
	For (i=1, i<=Nitems(main), i++,
		 //Check if there are missing columns from user input
		 If ( !Contains( col_name_list, main[i] ),
			  Write("WARNING! Column " || main[i] ||" does not exists. Creating data column.");
			  Caption("WARNING! Column " || main[i] ||" does not exists. Creating data column.");
			  Wait( 1 );
			  script1 = "dt<<New Column(\!"" || main[i] ||"\!", numeric, continuous);";
			  script1 = Eval( Parse( script1 ) );
			 );
		 //Check if there are overlap columns between two lists
		 For (j=1, j<=Nitems(second), j++,
		 	  If ( second[j] == main[i],
				   duplicate=Insert(duplicate,second[j]); Show (duplicate);
				 );
			 );	
		);
)
);
//Quick test to show if function is working	
A={}; Show(A);
B={"one", "two", "three"};
C={"four", "five", "three", "two"};
A=ColCheck(B,C);
Show(A);

Here is the output:

A = {};
duplicate = {};
duplicate = {"two"};
duplicate = {"two", "three"};
A = .;

The functions works, as seen from the values of "duplicate" variable.  The problem is this: the duplicate content cannot be passed to variable "A". Is there anything wrong with my code?

 

1 ACCEPTED SOLUTION

Accepted Solutions
txnelson
Super User

Re: User-Defined Function: How to pass output variable value to another variable

What is passed back from a JMP function or Format is the last value processed, therefore if you add "duplicate" as the last item, it works great.

ColCheck = Function( {main, second},
	{duplicate},
	duplicate = {};
	Show( duplicate );
	For( i = 1, i <= N Items( main ), i++, 
		 //Check if there are missing columns from user input
		If( !Contains( col_name_list, main[i] ),
			Write( "WARNING! Column " || main[i] || " does not exists. Creating data column." );
			Caption( "WARNING! Column " || main[i] || " does not exists. Creating data column." );
			Wait( 1 );
			script1 = "dt<<New Column(\!"" || main[i] || "\!", numeric, continuous);";
			script1 = Eval( Parse( script1 ) );
		);
		 //Check if there are overlap columns between two lists
		For( j = 1, j <= N Items( second ), j++,
			If( second[j] == main[i],
				duplicate = Insert( duplicate, second[j] );
				Show( duplicate );
			)
		);
	);
	duplicate;
);
Jim

View solution in original post

2 REPLIES 2
txnelson
Super User

Re: User-Defined Function: How to pass output variable value to another variable

What is passed back from a JMP function or Format is the last value processed, therefore if you add "duplicate" as the last item, it works great.

ColCheck = Function( {main, second},
	{duplicate},
	duplicate = {};
	Show( duplicate );
	For( i = 1, i <= N Items( main ), i++, 
		 //Check if there are missing columns from user input
		If( !Contains( col_name_list, main[i] ),
			Write( "WARNING! Column " || main[i] || " does not exists. Creating data column." );
			Caption( "WARNING! Column " || main[i] || " does not exists. Creating data column." );
			Wait( 1 );
			script1 = "dt<<New Column(\!"" || main[i] || "\!", numeric, continuous);";
			script1 = Eval( Parse( script1 ) );
		);
		 //Check if there are overlap columns between two lists
		For( j = 1, j <= N Items( second ), j++,
			If( second[j] == main[i],
				duplicate = Insert( duplicate, second[j] );
				Show( duplicate );
			)
		);
	);
	duplicate;
);
Jim
shaira
Level IV

Re: User-Defined Function: How to pass output variable value to another variable

Thanks Jim. It's working now.

 

Best,

Shaira

Recommended Articles