Text 如何将没有列名的文本文件导入SAS格式SAS Viya?
我有一个文本文件在SAS Viya的workbench中上传,没有列标题。我需要转换成SAS格式的文件,并指定自己的列名,我在word文档。我在SAS Viya中使用自动导入功能时得到了这段代码,但我不知道如何分配列名。任何帮助都会很好Text 如何将没有列名的文本文件导入SAS格式SAS Viya?,text,import,sas,Text,Import,Sas,我有一个文本文件在SAS Viya的workbench中上传,没有列标题。我需要转换成SAS格式的文件,并指定自己的列名,我在word文档。我在SAS Viya中使用自动导入功能时得到了这段代码,但我不知道如何分配列名。任何帮助都会很好 proc sql; %if %sysfunc(exist(WORK.NEWDATA)) %then %do; drop table WORK.NEWDATA; %end; %if %sysfunc(exist(WORK.NEWDATA,VIEW)) %t
proc sql;
%if %sysfunc(exist(WORK.NEWDATA)) %then %do;
drop table WORK.NEWDATA;
%end;
%if %sysfunc(exist(WORK.NEWDATA,VIEW)) %then %do;
drop view WORK.NEWDATA;
%end;
quit;
FILENAME LOC DISK '/workspace/workbench/myorg/data/home/olddatatoimport.txt';
PROC IMPORT DATAFILE=LOC
DBMS=DLM
OUT=WORK.NEWDATA;
GETNAMES=YES;
RUN;
当
GETNAMES=NO
时,可以使用RENAME
语句更改PROC IMPORT
指定的默认列名
例如:
假定Word文档中的列名已复制并粘贴到SAS数据行中
仅文件名数据温度;
*创建一些样本数据;
数据为空;
仅文件数据dlm=',';
设置sashelp.class(obs=3);
姓名年龄性别身高体重;
跑
*记录样本数据,以便查看;
数据为空;
只填充数据;
输入;
把"填入";;
跑
*只导入数据数据文件,没有要获取的名称!;
*默认列名为VAR1到VAR;
proc import file=onlydata replace out=onlydata dbms=csv;
GETNAMES=NO;
跑
*假定Word文档中的列名顺序正确
*(与数据文件匹配)并复制粘贴到数据行中;
数据列名称(label=“From WORD document”);
长度名称$32;
输入名称;
数据线;
名称
年龄
性
高度
重量
跑
*为RENAME语句构造oldname=newname源代码对;
数据为空;
设置列名称结束=最后一列;
长度对$32000;
保持成对;
pairs=catx(“”,pairs,catx(“”,cats('var','n','name));
如果是最后一列,那么
调用symput('pairs',trim(pairs));
跑
*使用Proc数据集修改数据集的标题部分;
*不会重写整个数据集;
proc数据集nolist lib=工作;
仅修改数据;
重命名&配对;
跑
退出
%让syslast=onlydata;
查看的日志图像
具有默认PROC IMPORT
列名的数据集
通过PROC数据集应用的RENAME
语句后的数据集
显示Word文档中的数据结构。您能用SAS阅读文档吗?Word文档是经常更改还是一次性更改?数据文件是文本文件格式,标题名在单独的Word文档中。我把word文档放在不同的位置。当我在SAS viya(我提供的代码)中使用import函数时,它只是帮助Var1 Var2等。但是我需要名称为Var1=State,Var2=cityWord文档是否也描述了变量中的内容(字符串、数字、日期、时间、日期时间)?如果是这样,请跳过强制SAS使用PROC IMPORT猜测如何定义变量的步骤,而只需编写一个数据步骤来直接读取文件。请注意,要生成CSV文件,您需要使用DSD选项,而不仅仅是更改分隔符。在您的示例中不会有任何区别,因为SASHELP.CLASS中的值不包含任何逗号。
filename onlydata temp;
* create some sample data;
data _null_;
file onlydata dlm=',';
set sashelp.class(obs=3);
put name age sex height weight;
run;
* log the sample data just to get a look-see;
data _null_;
infile onlydata;
input;
put _infile_;
run;
* IMPORT the data only datafile, no names to get!;
* default column names are VAR1 to VAR<n>;
proc import file=onlydata replace out=onlydata dbms=csv;
GETNAMES=NO;
run;
* presume the column names in the Word document are in the correct order
* (matching the data file) and were copy & pasted into the datalines;
data column_names(label="From WORD document");
length name $32;
input name;
datalines;
name
age
sex
height
weight
run;
* Construct the oldname=newname source code pairs for a RENAME statement;
data _null_;
set column_names end=last_column;
length pairs $32000;
retain pairs;
pairs = catx(' ', pairs, catx('=', cats('var',_n_), name));
if last_column then
call symput ('pairs', trim(pairs));
run;
* use Proc DATASET to modify the header portion of the datas set;
* will not rewrite the entire data set;
proc datasets nolist lib=work;
modify onlydata;
rename &pairs;
run;
quit;
%let syslast = onlydata;