JSL: come modificare una colonna in un numero intero di 1 byteSto lavorando con file di grandi dimensioni e sto cercando di essere più parsimonioso quando si tratta di memoria. Voglio cambiare il tipo di dati per alcune colonne in "1 byte intero" usando JSL ma non riesco a capirlo.
Ho impostato le mie preferenze Tabella su "Consenti formato dati numerico breve" e posso modificare manualmente il tipo di dati di una colonna, ma devo farlo con JSL.Se cambio il tipo di dati a mano e quindi copio e incollo la colonna in uno script, vedo che il tipo di dati per un intero a 1 byte sembra essere "Numeric(1)" . Forse questo è un indizio.
Ecco alcune cose che ho provato:
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 NumericProbabilmente è qualcosa di semplice, ma finora non ho trovato alcuna soluzione nella Guida o nella community di JMP. Qualsiasi aiuto sarebbe apprezzato. (Sono su JMP 16.1.)
Tabella datiSceneggiaturaRe: JSL: come modificare una colonna in un numero intero di 1 bytePer impostare una colonna esistente sul formato a 1 byte, guarda questo esempio:
// 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);Re: JSL: come modificare una colonna in un numero intero di 1 byteEcco un esempio per creare una nuova variabile come colonna di dati con una lunghezza di parola breve per interi con segno utilizzando un singolo byte.
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 ) );
Re: JSL: come modificare una colonna in un numero intero di 1 byteGrazie! Speravo di trovare un modo per dire a JMP quando creo la colonna che saranno solo uno e zero e quindi un numero intero di 1 byte è sufficiente.
Mi sembra strano che io possa forzare una colonna a essere un numero intero di 1, 2 o 4 byte usando i menu delle proprietà della colonna, ma non posso farlo con gli script.Mi chiedo se questo abbia a che fare con il fatto che esiste un'opzione di preferenza che consente questi tipi di dati e JSL non è abbastanza "intelligente" per sapere se è abilitato ma la GUI lo è.

La compressione è una soluzione, ma sarei comunque interessato se qualcuno sapesse come impostare il tipo di modellazione prima di popolare la colonna.
Re: JSL: come modificare una colonna in un numero intero di 1 byteCerca l'indice di script con "1 byte":

Sembra funzionare:

Re: JSL: Come trasformare una colonna in un intero di 1 byteNotare che.
Il tipo intero a N bit è utile per comprimere le colonne.
D'altro canto, l'utente deve prestare attenzione ai calcoli successivi, soprattutto quando il calcolo viene avviato tramite il
clic destro / colonna Nuova formula / menu Formula:

Cominciamo con
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] ),
)
);
e calcolare

JMP copia il tipo di dati della colonna di input e invece di 0.1 restituirà:

D'altro canto, quando l'utente seleziona entrambe le colonne di input e calcola il "rapporto" tramite:

JMP crea la colonna con

impostazione ... e il risultato è 0,1:
