es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe una función de SAS similar a una Xlookup?

Estoy trabajando en un proyecto que involucra dos archivos CSV separados. El primer conjunto de datos, “Trips”, tiene siete columnas, con un tripid, bikeid, duración, fromstationid, tostationid, capacidad y usertype. El tipo de usuario es el único valor de caracteres, el resto son numéricos. El segundo archivo CSV tiene stationid y stationname. El objetivo es fusionar los archivos de alguna manera que ingrese el nombre de la estación desde el segundo archivo CSV a las secciones “from” y “to” de la primera, basado en el ID de la estación. Sé que esto sería extremadamente fácil en Excel con una función xlookup, pero me pregunto cuál es la forma correcta de abordar esto en SAS.

Estoy utilizando la edición universitaria de SAS (la gratuita en línea) si eso hace alguna diferencia. Hasta ahora, nuestro código es el siguiente:

data DivvyTrips;
    infile '/home/u59304398/sasuser.v94/DivvyTrips.csv' dsd;
    input trip<em>id
          bikeid
          tripduration
          from</em>station<em>id
          to</em>station_id 
          capacity 
          usertype $;
    title "Trips";
run;

data DivvyStations;
    infile '/home/u59304398/sasuser.v94/Divvy<em>Stations.csv' dsd;
    input station</em>id
          station_name $;
    title "Stations";
run;

Todo esto hace es importar los datos. No creo que una fusión con ordenamiento funcione porque necesitamos tanto los nombres de las estaciones de origen como las de destino.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr el objetivo de ingresar el nombre de la estación desde el segundo archivo csv en las secciones “desde” y “hasta” de la primera, basándonos en el id de la estación, podemos usar una unión SQL en lugar de una combinación con una clasificación.

    En primer lugar, necesitamos crear un nuevo conjunto de datos que fusiona los dos conjuntos de datos iniciales. Podemos hacer esto utilizando una unión SQL por el id de la estación como clave común.

    proc sql;
     create table merged_dataset as 
     select A.*, B.station_name as from_station_name, C.station_name as to_station_name 
     from DivvyTrips A 
     left join DivvyStations B on A.from_station_id = B.station_id 
     left join DivvyStations C on A.to_station_id = C.station_id;
    quit; 
    

    Esto creará un nuevo conjunto de datos llamado “merged_dataset” que tendrá todas las columnas de “DivvyTrips” y la columna “station_name” de “DivvyStations” tanto para “from_station_id” como para “to_station_id”.

    Tenga en cuenta que estamos utilizando la palabra clave “left join” para asegurarnos de que se incluyan todas las filas de “DivvyTrips” incluso si no hay un id de estación correspondiente en “DivvyStations”.

    Finalmente, podemos usar el nuevo conjunto de datos “merged_dataset” para analizar o visualizar los datos con la información adicional del nombre de la estación.

    proc print data=merged_dataset;
    run;
    

Comments are closed.