cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
  • We’re improving the Learn JMP page, and want your feedback! Take the survey
  • JMP monthly Newswire gives user tips and learning events. Subscribe
Choose Language Hide Translation Bar
SpannerHead
Level VI

Column Names With A Numeric Initial

I have a code that stumbles with column names having a numeric initial, whereby the code thinks the name represents a date.  I did a column rename to overcome the problem but it's ugly.  I also found that wrapping the object that represents the names in a Char(obj) statement didn't work either.  Any suggestions on how to better deal with this?

dt = Current Data Table();
cnmes = dt << get column names( "string" );
For( j = 1, j <= N Items( cnmes ), j++, 

        if (Starts With( cnmes[j], "1" ) == 1 | Starts With( cnmes[j], "2" ) == 1 | Starts With( cnmes[j], "3" ) == 1| Starts With( cnmes[j], "4" ) == 1 | Starts With( cnmes[j], "5" ) == 1 | Starts With( cnmes[j], "6" ) == 1 | Starts With( cnmes[j], "7" ) == 1 | Starts With( cnmes[j], "8" ) ==1 | Starts With( cnmes[j], "9" ) == 1 | Starts With( cnmes[j], "0") == 1 , 
        
        Column(cnmes[j]) << set name("_"||cnmes[j])   

   ) );    

Slán



SpannerHead
1 ACCEPTED SOLUTION

Accepted Solutions
jthi
Super User

Re: Column Names With A Numeric Initial

You are seeing those issues as Names have to start with either alphabetic character or with underscore Scripting Guide > JSL Building Blocks > JSL Syntax Rules > Names . Depending on what you are doing, you might want to rename them or not (see txnelson's options), for renaming you could for example utilize regex with something like this

Names Default To Here(1);

dt = New Table("Untitled",
	Add Rows(0),
	Compress File When Saved(1),
	New Column("1col", Numeric, "Continuous", Format("Best", 12), Set Values([])),
	New Column("13col", Numeric, "Continuous", Format("Best", 12), Set Values([])),
	New Column("0col", Numeric, "Continuous", Format("Best", 12), Set Values([])),
	New Column("Column 4",
		Numeric,
		"Continuous",
		Format("Best", 12),
		Set Values([])
	)
);

colnames = dt << Get Column Names("String");
For Each({colname}, colnames,
	newname = Regex(colname, "^\d+.+", "_\0");
	If(!IsMissing(newname),
		Column(dt, colname) << Set Name(newname);
	);
);
-Jarmo

View solution in original post

2 REPLIES 2
txnelson
Super User

Re: Column Names With A Numeric Initial

You can use the Column() function to reference column names in your "cnmes" list of column names.  Or if you are hard coding the column names, using the following 

// Report snapshot: Big Class - Graph Builder
Data Table( "Big Class" ) << Graph Builder(
	Variables( X( :"1height"n ), Y( :"1height"n ) ),
	Elements( Points( X, Y, Legend( 6 ) ), Smoother( X, Y, Legend( 7 ) ) )
);

txnelson_0-1747412759528.png

names default to here(1);
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );


// Change column name: height → 1height
try(Data Table( "Big Class" ):height << Set Name( "1height" ));


// Change column name: weight → 3weight
try(Data Table( "Big Class" ):weight << Set Name( "3weight" ));

cnmes = dt << get column names( "string" );

Graph Builder(
	Variables( X( column(cnmes[5])), Y(  column(cnmes[4]) ) ),
	Elements( Points( X, Y, Legend( 6 ) ), Smoother( X, Y, Legend( 7 ) ) )
);
Jim
jthi
Super User

Re: Column Names With A Numeric Initial

You are seeing those issues as Names have to start with either alphabetic character or with underscore Scripting Guide > JSL Building Blocks > JSL Syntax Rules > Names . Depending on what you are doing, you might want to rename them or not (see txnelson's options), for renaming you could for example utilize regex with something like this

Names Default To Here(1);

dt = New Table("Untitled",
	Add Rows(0),
	Compress File When Saved(1),
	New Column("1col", Numeric, "Continuous", Format("Best", 12), Set Values([])),
	New Column("13col", Numeric, "Continuous", Format("Best", 12), Set Values([])),
	New Column("0col", Numeric, "Continuous", Format("Best", 12), Set Values([])),
	New Column("Column 4",
		Numeric,
		"Continuous",
		Format("Best", 12),
		Set Values([])
	)
);

colnames = dt << Get Column Names("String");
For Each({colname}, colnames,
	newname = Regex(colname, "^\d+.+", "_\0");
	If(!IsMissing(newname),
		Column(dt, colname) << Set Name(newname);
	);
);
-Jarmo

Recommended Articles