我有一个问题要问, 我正在处理一个小型的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 $;
谢谢你。
答案 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=2
和INFILE
选项。这将正确处理缺失值并跳过带有变量名称的行。您还可能希望添加TRUNCOVER
选项以正确处理仅包含某些列的行。通过包含LENGTH
或ATTRIB
语句来正确定义变量是值得的。否则,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;