cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • See how to interactively organize and restructure data for analysis. Register for May 29 webinar, 2pm US ET.

Discussions

Solve problems, and share tips and tricks with other JMP users.
Choose Language Hide Translation Bar
ond_stats
Level II

Name Unresolved: Column name will not resolved when I specify it as a value in a list

I am trying to calculate the AUC for each column in a data table. I am collecting all of the column names into a list "colNamesList", and retrieving each column name in Fit Model inside a For loop by incrementing the list subscript. However, the call to the array is not resolving inside the Fit Model call.  If I include show(colNamesList[i]) on a separate line, it resolves fine, just not inside the Fit Model call. I am using a script from a prior post in this forum, and I suspect that my older version of JMP (version 9.0.0) just needs slightly different syntax. Any ideas would be appreciated.

 

Names Default To Here( 1 );

// Open and example data table
dt = Open( "sample.jmp" );

// Get the columns to be analyzed
colNamesList = dt << get column names( string );

// Create a data table to save the results to
dtOutput = New Table( "Results", New Column( "var_name", character ), New Column( "AUC", character ) );

// Loop across all of the columns to be analyzed and retrieve the AUC
For( i = 1, i <= N Items( colNamesList ), i++,
	// Add a new row to the output data table
	dtOutput << Add Rows( 1 );
	// Add the active variable name to the current row in the data table
	dtOutput:var_name[i] = colNamesList[i];
	// Run the Logistic Regression
	theLog = dt << Fit Model(invisible, Y( :case ),Effects( column (colNameList[i]) ),Personality( Nominal Logistic ),Run(Positive Level( "1" ),Likelihood Ratio Tests( 1 ),ROC Curve( 1 ),));
	// Add the AUC to the data table by grabbing it from the display report output
	dtOutput:AUC = (Report( theLog )["Receiver Operating Characteristic"][numberbox(1)] << get text);
	// Close the report window
	Report( theLog ) << close window;
);

The error in the log is as follows:

Name Unresolved: colNameList{1}

 in access or evaluation of 'colNameList' , colNameList

Exception in platform launch{1}

 in access or evaluation of 'Fit Model' , Fit Model(
	invisible,
	Y( :case ),
	Effects( Column( colNameList[i] ) ),
	Personality( Nominal Logistic ),
	Run( Positive Level( "1" ), Likelihood Ratio Tests( 1 ), ROC Curve( 1 ) )
)

In the following script, error marked by /*###*/
Fit Model(
	invisible,
	Y( :case ),
	Effects( Column( colNameList/*###*/[i] ) ),
	Personality( Nominal Logistic ),
	Run( Positive Level( "1" ), Likelihood Ratio Tests( 1 ), ROC Curve( 1 ) )
)
Cannot subscript Display Box{1}

 in access or evaluation of 'Subscript' , Report( theLog )["Receiver Operating Characteristic"]

In the following script, error marked by /*###*/
Names Default To Here( 1 );
dt = Open( "sample.jmp" );
colNamesList = dt << get column names( string );
dtOutput = New Table( "Results",
	New Column( "var_name", character ),
	New Column( "AUC", character )
);
For( i = 1, i <= N Items( colNamesList ), i++,
	dtOutput << Add Rows( 1 );
	dtOutput:var_name[i] = colNamesList[i];
	theLog = dt << Fit Model(/*###*/invisible,
		Y( :case ),
		Effects( Column( colNameList[i] ) ),
		Personality( Nominal Logistic ),
		Run( Positive Level( "1" ), Likelihood Ratio Tests( 1 ), ROC Curve( 1 ) )
	);
	dtOutput:AUC = Report( theLog )[/*###*/"Receiver Operating Characteristic"][
	numberbox( 1 )] << get text;
	Report( theLog ) << close window;
);
1 ACCEPTED SOLUTION

Accepted Solutions
ond_stats
Level II

Re: Name Unresolved: Column name will not resolved when I specify it as a value in a list

Yes, that was a typo and fixing it was part of the solution, so thanks for seeing that. I was still getting a "could not find column{1}" error, and that resolved by referencing the data table when specifying the column: Column(dt, colNamesList[i]) instead of Column(colNamesList[i]). Then I got the error "Response should also not be a factor, ^1case", so I added an IF statement to ignore the response column. This ran whether I added the subscript to AUC. 

 

So here is my first jsl script. Quite a learning experience. Thanks to txnelson for you help!

 

Names Default To Here( 1 );

// Open and example data table
dt = Open( "sample.jmp" );

// Get the columns to be analyzed
colNamesList = dt << get column names( string );

// Create a data table to save the results to
dtOutput = New Table( "Results", New Column( "var_name", character ), New Column( "AUC", character ) );

// Loop across all of the columns to be analyzed and retrieve the AUC
For( i = 1, i <= N Items( colNamesList ), i++,
	// Add a new row to the output data table
	dtOutput << Add Rows( 1 );
	// Add the active variable name to the current row in the data table
	dtOutput:var_name[i] = colNamesList[i];
	//Get the next column name
	colName = colNamesList[i];
	// If the column is "case", leave AUC blank, otherwise run the Logistic Regression
	if(colName=="case", AUC=.,
		theLog = dt << Fit Model(
			invisible,
			Y(:case),
			Effects(column(dt,colName)),
			Personality( Nominal Logistic ),
			Run(
				Positive Level( "1" ),
				Likelihood Ratio Tests( 1 ),
				ROC Curve( 1 ),
				)
			);
		// Add the AUC to the data table by grabbing it from the display report output
		dtOutput:AUC[i] = (Report( theLog )["Receiver Operating Characteristic"][numberbox(1)] << get text);
	);
	// Close the report window
	Report( theLog ) << close window;
);

View solution in original post

3 REPLIES 3
txnelson
Super User

Re: Name Unresolved: Column name will not resolved when I specify it as a value in a list

  1. The reason the Name was Unresolved is because you called the list, colNamesList, and you referenced it as colNameLise.
  2. The AUC value needs to be placed at a defined row, therefore you need to add the suscript to dtOutput:AUC
Names Default To Here( 1 );

// Open and example data table
dt = Open( "sample.jmp" );

// Get the columns to be analyzed
colNamesList = dt << get column names( string );

// Create a data table to save the results to
dtOutput = New Table( "Results", New Column( "var_name", character ), New Column( "AUC", character ) );

// Loop across all of the columns to be analyzed and retrieve the AUC
For( i = 1, i <= N Items( colNamesList ), i++, 
	// Add a new row to the output data table
	dtOutput << Add Rows( 1 );
	// Add the active variable name to the current row in the data table
	dtOutput:var_name[i] = colNamesList[i];
	// Run the Logistic Regression
	theLog = dt << Fit Model(
		invisible,
		Y( :case ),
		Effects( Column( colNamesList[i] ) ),
		Personality( Nominal Logistic ),
		Run( Positive Level( "1" ), Likelihood Ratio Tests( 1 ), ROC Curve( 1 ) )
	);
	
	// Add the AUC to the data table by grabbing it from the display report output
	dtOutput:AUC[i] = (Report( theLog )["Receiver Operating Characteristic"][numberbox( 1 )] << get text);
	// Close the report window
	Report( theLog ) << close window;
);
Jim
ond_stats
Level II

Re: Name Unresolved: Column name will not resolved when I specify it as a value in a list

Yes, that was a typo and fixing it was part of the solution, so thanks for seeing that. I was still getting a "could not find column{1}" error, and that resolved by referencing the data table when specifying the column: Column(dt, colNamesList[i]) instead of Column(colNamesList[i]). Then I got the error "Response should also not be a factor, ^1case", so I added an IF statement to ignore the response column. This ran whether I added the subscript to AUC. 

 

So here is my first jsl script. Quite a learning experience. Thanks to txnelson for you help!

 

Names Default To Here( 1 );

// Open and example data table
dt = Open( "sample.jmp" );

// Get the columns to be analyzed
colNamesList = dt << get column names( string );

// Create a data table to save the results to
dtOutput = New Table( "Results", New Column( "var_name", character ), New Column( "AUC", character ) );

// Loop across all of the columns to be analyzed and retrieve the AUC
For( i = 1, i <= N Items( colNamesList ), i++,
	// Add a new row to the output data table
	dtOutput << Add Rows( 1 );
	// Add the active variable name to the current row in the data table
	dtOutput:var_name[i] = colNamesList[i];
	//Get the next column name
	colName = colNamesList[i];
	// If the column is "case", leave AUC blank, otherwise run the Logistic Regression
	if(colName=="case", AUC=.,
		theLog = dt << Fit Model(
			invisible,
			Y(:case),
			Effects(column(dt,colName)),
			Personality( Nominal Logistic ),
			Run(
				Positive Level( "1" ),
				Likelihood Ratio Tests( 1 ),
				ROC Curve( 1 ),
				)
			);
		// Add the AUC to the data table by grabbing it from the display report output
		dtOutput:AUC[i] = (Report( theLog )["Receiver Operating Characteristic"][numberbox(1)] << get text);
	);
	// Close the report window
	Report( theLog ) << close window;
);
txnelson
Super User

Re: Name Unresolved: Column name will not resolved when I specify it as a value in a list

Great job!

 

You can avoid the error response by changing the line to

try(Report( theLog ) << close window);

You can also shorten and make the JSL run more efficiently by removing the duplicate assignments to a single statement

colName = dtOutput:var_name[i] = colNamesList[i];
Jim

Recommended Articles