sas - 将(内部存在的)列标题作为第一行插入到表中
问题描述
假设我们有一个表INPUT_TABLE
,它有四列name
、lat
、lon
和z
,其中填充了许多数据集。在SAS Explorer中,它看起来像这样:
name lat lon z
1 Germany 49.420469 8.7269178 17
2 England 51.5540693 -0.8249039 16
...
PREPROCESSED_TABLE
我将基于此的 a移交INPUT_TABLE
给宏%tabl
:
data V42.PREPROCESSED_TABLE;
set V21.INPUT_TABLE;
drop NAME;
run;
%tabl(libin=V42, file=PREPROCESSED_TABLE);
我不允许修改宏本身。
除其他外,%tabl
还编写了一个纯文本文件PREPROCESSED_TABLE.txt
:
49.420469|8.7269178|17
51.5540693|-0.8249039|16
我也想写出标题名称,例如:
lat|lon|z
49.420469|8.7269178|17
51.5540693|-0.8249039|16
我的想法是扩展步骤PREPROCESSED_TABLE
中的某个地方data
- 有人可以帮我吗?如何读出内部存储的标题名称?
解决方案
如果目标是创建一个包含变量名称的文件,那么只需自己编写文件。首先将名称放入数据集(按顺序),然后将它们写入。例如,您可以使用带有 OBS=0 数据集选项的 PROC TRANSPOSE 来生成每个变量一个观察值的文件。
proc transpose data=V42.PREPROCESSED_TABLE(obs=0) out=NAMES ;
var _all_ ;
run;
然后您可以使用它来写入文件。
data _null_;
set names ;
file 'preprocessed.txt' dsd dlm='|';
put _name_ @ ;
run;
如果您还想将数据添加到同一个文件中,只需使用第二个数据步骤。确保在 FILE 语句中使用 MOD 选项,以便将数据行附加到现有文件中。
data _null_;
set V42.PREPROCESSED_TABLE;
file 'preprocessed.txt' dsd dlm='|' mod;
put (_all_) (+0);
run;
如果您出于其他原因需要调用现有宏,您可以忽略它创建的文件。或者,如果由于某种原因内容与文件的简单转储不同,那么您可以将文件与头文件与宏生成的文件连接起来。假设宏生成了“PREPROCESSED_TABLE.txt”,而您的代码生成了单行文件“headers.txt”。然后这一步将读取并写入'PREPROCESSED_TABLE_w_headers.txt';
data _null_;
file 'PREPROCESSED_TABLE_w_headers.txt';
if _n_=1 then do;
infile 'headers.txt';
input;
put _infile_;
end;
infile 'PREPROCESSED_TABLE.txt';
input;
put _infile_;
run;
推荐阅读
- c# - 我正在尝试使用 html 提交按钮运行 asp.net 方法,但该方法无法运行?
- python - 按下特定键时增加值,然后在表格中记录值
- python - 在 Python 中以另一个变量的值为条件创建一个变量
- java - Java方法不会执行多次
- javascript - 你能写两次'for'吗?
- java - 无法创建 tempDir。java.io.tmpdir 设置为 /tmp
- java - 向服务器 HPSM9.41 webtier 推荐的 Tomcat 的 Java 堆大小
- javascript - 在 JavaScript 中过滤对象数组?
- c++ - 运算符不匹配*=
- java - 为什么 JUnit 5 Suite 注释 @SelectClasses 和 @IncludeClassNamePatterns 无法找到不以“Tests”或“Test”结尾的测试?