显示从SAS中的CSV文件加载的特定列

时间:2016-02-24 18:15:25

标签: database csv sas

我有一个问题要问, 我正在处理一个小型的csv数据库,我需要用SAS执行一些计算,我已经将一个excel文件导出为CSV格式,我想在SAS中加载一些列来使用,我遇到的问题是顺序加载后列不匹配:这是代码:

cars6.txt
AMC,Concord,22,2930,4099
AMC,Concord,22,2930,4099
AMC,Pacer,17,3350,4749
AMC,Spirit,22,2640,3799
Buick,Century,20,3250,4816
Buick,Electra,15,4080,7827 

输出数据的代码:

DATA cars6;
  INFILE "/folders/myfolders/hbv1/cars6.txt" delimiter=',';
  INPUT  make $ model $ mpg $ weight price;
RUN;

TITLE "cars5 data";
PROC PRINT DATA=cars5(OBS=5);
RUN;

但我想只显示列:制作,重量,价格? 那么如何打印选定的列? 如果我有命名列(如果这个例子与开头的列名'变量'不同,那么该怎么做)但是我试图调用列y名称,它打印它们但是数据不好(sas是获取有序列数据并根据列名忽略列数据:

input make $ model $ price $; 
谢谢你。

3 个答案:

答案 0 :(得分:0)

尝试VAR中的PROC PRINT声明。

DATA cars6;
  INFILE "/folders/myfolders/hbv1/cars6.txt" delimiter=',' firstobs=2;
  INPUT  make $ model $ mpg $ weight price;
RUN;

proc print data=cars6 noobs;
var make weight price;
run;

答案 1 :(得分:0)

考虑使用proc import并根据需要选择列。 Proc导入可以处理以逗号分隔的文件,保存为.txt或.csv。下面是两种文本文件类型的演示:

%Let fpath = /folders/myfolders/hbv1;

** READING IN TXT;
proc import
    datafile = "&fpath/cars6.txt"
    out = Cars6
    dbms = csv replace; 
run;

** READING IN CSV;
proc import
    datafile = "&fpath/cars6.csv"
    out = Cars6
    dbms = csv replace;
run;

title "cars6 data";
proc print data=cars1(obs=5);
    var make model price;
run;

或者,您可以删除变量并使用retain重新排序报表所需的列:

data CarsReport;
    retain make model price;
    set Cars6;
    keep make model price;
run;

title "cars6 data";
proc print data=CarsReport(obs=5);    
run;

答案 2 :(得分:0)

如果您编写自己的程序来阅读CSV文件,那么您可能希望使用DSD语句中的FIRSTOBS=2INFILE选项。这将正确处理缺失值并跳过带有变量名称的行。您还可能希望添加TRUNCOVER选项以正确处理仅包含某些列的行。通过包含LENGTHATTRIB语句来正确定义变量是值得的。否则,SAS将不得不猜测您是否需要数字或字符变量,以及从您第一次引用它们的方式制作字符变量的时间。

DATA cars6;
  INFILE "/folders/myfolders/hbv1/cars6.txt" DSD DLM=',' FIRSTOBS=2 TRUNCOVER;
  LENGTH make model $20 mpg weight price 8 ;
  INPUT  make model mpg weight price;
RUN;

但是你的程序需要知道文件中变量的顺序。如果您的数据文件不一致,则可以尝试使用PROC IMPORT读取CSV文件。它可以从第一行获取名称,并对变量类型进行有根据的猜测。

proc import datafile='/folders/myfolders/hbv1/cars6.txt' out=car6 replace dbms=dlm ;
   delimiter=',';
   getnames=yes;
run;

使用您创建的SAS数据集中的数据时,可以使用SAS语言选择感兴趣的列。语法取决于您使用的过程。因此PROC PRINT使用VAR语句。

proc print data=car6 ;
  var price make model;
run;

PROC FREQ使用TABLES语句。

proc freq data=car6;
  tables make model;
run;