<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />He leído en el manual (Guía de scripting, Capítulo 11) donde se explica sobre 'Anidamiento y precedencia' y me pregunto si a otros les gustaría tener una opción que actuaría más como un operador de tubería (no muy diferente al%>% Magrittr operador en R). Así que en lugar de tener que anidar sus mensajes apilados con paréntesis como
((objeto << mensaje1) << mensaje2) << mensaje3
Sería más legible y naturalmente fluiría de izquierda a derecha
objeto% >>% mensaje1
% >>% message2
% >>% message3
Usted podría hacer esto. Puede que no sea el mejor enfoque para el mantenimiento futuro; Una variable bien nombrada puede aclarar mucho.
dt = abierto ("C: \ Archivos de programa \ SAS \ JMPPRO \ 13 \ Samples \ Import Data \ bigclass_L.txt")
<< selectwhere (13 <=: age <= 15) << invertRowSelection << deleterows
<< newcolumn ("halfage", fórmula (edad / 2))
<< selectwhere (row () <= 10) << invertRowSelection << deleterows;
Puede hacer que el invertRowSelection desaparezca cambiando la condición selectWhere.
Esto funciona porque elegí mensajes que no crean un nuevo objeto (como << subconjunto). Si se usa << subconjunto, entonces se necesitan parámetros adicionales para hacer que los mensajes subsiguientes vayan al nuevo objeto. Usar un subconjunto puede ser más rápido que usar eliminar.
Seis meses después, prefiero mantener algo un poco menos monolítico:
allData = Abrir ("C: \ Archivos de programa \ SAS \ JMPPRO \ 13 \ Samples \ Import Data \ bigclass_L.txt");
ageSubset = allData << selectwhere (13 <=: age <= 15) << subconjunto (filas seleccionadas (1));
tenRows = ageSubset << selectwhere (Fila () <= 10) << subconjunto (filas seleccionadas (1));
tenRows << Nueva columna ("halfage", fórmula (age / 2));
Cerrar (allData, nosave);
Cierre (ageSubset, nosave);
motivar... Me pregunté cómo los demás escribirían este ejemplo de R / magrittr en JSL, donde explican:
Four operations are performed to arrive at the desired data set, and they are written in a natural order: the same as the order of execution. Also, no temporary variables are needed. If yet another operation is required, it is straight-forward to add to the sequence of operations wherever it may be needed.
the_data <-
read.csv ('/ path / to / data / file.csv')%>%
subconjunto (variable_a> x)%>%
transformar (variable_c = variable_a / variable_b)%>%
cabeza (100)