JSL:如何将列更改为 1 字节整数我正在处理大文件,并试图在内存方面更加节俭。 我想使用 JSL 将某些列的数据类型更改为“1 字节整数”,但无法弄清楚。
我已将我的表首选项设置为“允许短数字数据格式”,我可以手动更改列的数据类型,但我需要使用 JSL 来完成。如果我手动更改数据类型,然后将列复制并粘贴到脚本中,我会看到 1 字节整数的数据类型似乎是 "Numeric(1)" 。 也许这是一个线索。
以下是我尝试过的一些事情:
dt = open("$sample_data/big class.jmp");
dt:age << Data Type(1-byte integer); //error "Agument to Type..."
dt:age << Data Type("1-byte integer"); //error "Agument to Type..."
dt:age << Data Type(Character); //this works, changes to Character
dt:age << Data Type(Numeric); //this works, changes to Numeric
dt:age << Data Type(Numeric(1)); //no error, but data type stays Numeric这可能很简单,但到目前为止我在 JMP 帮助或社区中找不到任何解决方案。 任何帮助,将不胜感激。 (我使用的是 JMP 16.1。)
数据表脚本回复:JSL:如何将列更改为 1 字节整数要将现有列设置为 1 字节格式,请查看以下示例:
// set JMP preferences to accept short numeric words
Set Preference( Allow short numeric data format( 1 ) );
dt = New Table( "Untitled",
Add Rows( 3 ),
New Column( "1 Byte Format",
Numeric( 1 ),
"Continuous",
Set Values( [1, 2, 3] )
),
New Column( "New Column",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [4, 5, 6] )
)
);
dt:New Column << set data type("numeric", 1);回复:JSL:如何将列更改为 1 字节整数下面是一个使用单个字节将新变量作为带符号整数的短字长的数据列的示例。
Names Default to Here( 1 );
// open target data table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// set JMP preferences to accept short numeric words
Set Preference( Allow short numeric data format( 1 ) );
// create a new column using shortened numeric data type
shorty = dt << New Column( "Short Age", Numeric( 1 ), Continuous,
Values( :age << Get As Matrix )
);
// your done. maybe set preference back to default
Set Preference( Allow short numeric data format( 0 ) );
回复:JSL:如何将列更改为 1 字节整数谢谢! 我希望找到一种方法在我创建列时告诉 JMP 它只会是 1 和 0,因此 1 字节整数就足够了。
我可以使用列属性菜单将列强制为 1、2 或 4 字节整数,这对我来说似乎很奇怪,但我不能用脚本来做到这一点。我想知道这是否与以下事实有关:存在允许这些数据类型的首选项,而 JSL 不够“智能”,无法知道是否已启用,但 GUI 已启用。

压缩是一种解决方案,但如果有人知道如何在填充列之前设置建模类型,我仍然会感兴趣。
回复:JSL:如何将列更改为 1 字节整数使用“1-byte”搜索脚本索引:

似乎在工作:

回复:JSL:如何将列更改为 1 字节整数请注意。
N 位整数类型适合压缩列。
另一方面,用户必须小心后续计算,尤其是当通过
右键单击/新建公式列/公式菜单:

让我们从
dt = New Table( "numeric data",
Add Rows( 3 ),
New Column( "numeric 1 byte Integer",
Numeric( 1 ),
Set Values( [1,2,3] ),
),
New Column( "numeric (default)",
Numeric,
Set Values( [10,20,30] ),
)
);
并计算

JMP 复制输入列的数据类型,它将返回 0.1 而不是:

另一方面,当用户选择两个输入列并通过以下方式计算“比率”时:

JMP 使用

设置...结果为 0.1:
