A veces se quiere dirigir con exactitud el cursor=puntero de lectura, indicándole a qué línea y
columna debe ir en cada observación para leer una determinada variable. Este modo de actuar
es frecuente sobre todo en lectura con formato. Los siguientes símbolos se pueden utilizar en
la sentencia input:
@var Mueve el cursor a la columna var (var puede ser una variable o un número).

+var Avanza var columnas, contando la columna actual del cursor.

#var Mueve el cursor a la línea var.

/ Salta a la línea siguiente.

@ (puesto al final de la sentencia) Mantiene el cursor en la línea actual, para que se
puedan utilizar varias sentencias INPUT sobre el mismo conjunto de datos.

@@ (puesto al final de la sentencia) Mantiene el cursor en la misma línea para leer
varios casos en la misma línea.

Ejemplo: observaciones que ocupan más de una línea
data uno;
length nombre direccion $ 60;
input
#1 nombre $58. edad 59-60 sexo $ 61
#2 direccion $60. codigo;
cards;
Pedro Pérez García                    25V
Avenida de la Ilustración,29          28021
María López Maesó                     23M
Calle Antonio López,42                28012
;
data software.fichero;
/**
en vez de #2 podemos poner /. En c�digo se puede poner 61-65.
**/
input #1 Nombre $ 58., Edad 59-60 sexo $61 #2 Direccion $ 60., CodigoPostal ;
cards;
Pedro Perez Garcia                                  25V
Av. Ilustarcion 28                                  28030
;
run;
proc print data=software.fichero;
run;
En caso de que cada observación ocupe varias líneas hay que indicar obligatoriamente en
la sentencia INPUT, que sitúe el puntero de lectura en la última línea de cada observación,
para que automáticamente comience a leer en la primera línea de texto de la siguiente
observación. Esto se realiza con la sentencia de puntero #n, al final de la sentencia INPUT.
Ejemplo: observaciones que ocupan varias líneas
data uno;
input edad 1-2 @3 sexo $ /peso 1-3 .1 altura #3;
cards;
24H
804 1.75
435643643643
12M
337 1.60
234525252552
15M
384 1.70
457456465465
;
data software.fichero;
/**
en vez de #2 podemos poner /. En c�digo se puede poner 61-65.
**/
input #1 Nombre $ 58., Edad 59-60 sexo $61 #2 Direccion $ 60., CodigoPostal ;
cards;
Pedro Perez Garcia                                  25V
Av. Ilustarcion 28                                  28030
;
run;
proc print data=software.fichero;
run;
Ejemplo: observaciones con número variable de líneas o número variable de variables a
leer
data uno;
input x1 x2 control @;
if control=2 then input #2 x3 x4;
cards;
5 23 1
6 34 2
6 7
4 23 1
3 45 2
5 6
;
Ejemplo: lectura de un subconjunto de observaciones
data uno;
infile cards firstobs=2 obs=2;
input a b;
cards;
1 6
9 6
45 4
3 1
;

libname software 'E:\SAS\';
data software.ejemplo;
input x1 x2 control@;
if control=2 then input #2 x3 x4;
cards;
5 23 1
6 34 2
6 7
4 23 1
3 5 2
5 6
;
run;
proc print data=software.ejemplo;
run;

data software.ejemplo_02;
input x1 x2 x3 control@;
if control=2 then input #2 x4 x5 x6 /  x7 x8 x9;
if control=3 then input #2 x4 x5 x6;

cards;
25 2 8 1
6 7 5 2
7 1 3
5 22 8
2 2 4 3
1 2 3
;
run;
proc print data=software.ejemplo_02;
run;

data software.ejemplo_02;
input x1 x2 x3 control@;
if control=2 then input #2 x4 x5 x6 #3  x7 x8 x9;
if control=3 then input #2 x4 x5 x6;

cards;
25 2 8 1
6 7 5 2
7 1 3
5 22 8
2 2 4 3
1 2 3
;
run;
proc print data=software.ejemplo_02;
run;

data software.ejercicio02;

input nombre $ 1-14/ edad 1-2 sexo $ 3-4 peso 5-9 .2/ altura 3.2/ direccion $ 1-30 #4 ;
cards;
Juan Rodriguez
25V 5060
160
Avda. Puerta de Hierro
Juana Lopez
25V 5140
48
Avda. Los Olmos
;
run;
proc print data=software.ejercicio02;
run;
data software.ejercicio02;
/* no lee la ��inea direcci�n. COMPROBAR SI # TIENEN QUE IR DELANTE*/

input nombre $ 1-14 #2 edad 1-2 sexo $ 3-4 peso 5-9 .2 #3 altura 3.2 #4  ;
cards;
Juan Rodriguez
25V 5060
160
Avda. Puerta de Hierro
Juana Lopez
25V 5140
48
Avda. Los Olmos
;
run;
proc print data=software.ejercicio02;
run;

data software.ejercicio02;
/* Otra forma. no lee la ��inea direcci�n. Indico el �`umero de l�neas de la observaci�n (4)*/

input nombre $ 1-14 / edad 1-2 @4 sexo $ 3-4 peso 5-9 .2 / altura 3.2 #4  ;
cards;
Juan Rodriguez
25 V 5060
160
Avda. Puerta de Hierro
Juana Lopez
25V 5140
48
Avda. Los Olmos
;
run;
proc print data=software.ejercicio02;
run;
Ejemplo: lectura de un subconjunto de observaciones
data uno;
infile cards firstobs=2 obs=2;
input a b;
cards;
1 6
9 6
45 4
3 1
;
/*Que lea de la 3� a la sexta filas
NO LEE OBSERVACIONES??????*/
data software.ejemplo_03;
infile cards  firstobs=2 obs=3;
input x1 x2 x3 control@;
if control=2 then input #2 x4 x5 x6 #3  x7 x8 x9;
if control=3 then input #2 x4 x5 x6;

cards;
25 2 8 1
6 7 5 2
7 1 3
5 22 8
2 2 4 3
1 2 3
;
run;
proc print data=software.ejemplo_03;
run;

/*Que lea de la 2� a la 3�*/
data software.ejemplo_03;
input x1 x2 x3 x4;
infile cards  firstobs=2 obs=3;

cards;
2 2 8 1
6 7 5 2
7 1 3 1
5 2 8 5
2 2 4 3
1 2 3 4
;
run;
proc print data=software.ejemplo_03;
run;
Finalmente se abordará la manera de leer datos en los cuales hay varias observaciones por
cada valor clave de una variable. Se utilizará la opción input... @; que deja el puntero de
lectura preparado en la misma línea después de leer la variable clave.
data software.ejemplo_04;
input Grupo@;
do i=1 to 3;
input x1 x2 @@;
output;
end;
cards;
1 78 43 34 21 2 1
2 33 11 9 7 8 5
;
run;
proc print data=software.ejemplo_04;
run;

Notación abreviada para varias variables
Si por ejemplo hay 7 variables con el mismo formato, es útil la notación
input (var1-var7) (formato).
Esto es práctico si se desean leer muchas variables de la misma longitud.
Ejemplo: notación abreviada en lectura con formato
data uno;
input (x1-x3) (2.);
cards;
455678
324512
;