我不确定这是否可能(或愚蠢的问题),因为我刚刚开始研究SAS上周。我已经成功地将我的.CSV文件导入到一个SAS数据集,使用:
proc import
指定guessingrows=
以限制我的out=
。
我现在的问题是,我要导入的CSV文件的结构不一样,在编写了一些使用obsnum=
指定开始和要读取的x行的代码后,我注意到了这一点。
那么,我的问题是,SAS是否能够查找特定的字符串/空变量,并用作结束观察?
我的数据看起来像(但是每个文件的Var_x数不同):
首先,我试着查看slice=
,但是只有当我知道确切的感兴趣的地方时,才会有用,因为组之间的空空间可能会有所不同。
是否可以使用set
函数指定从第1行开始并读取到包含空白字段?或者你能把我重新引导到某种功能(我找不到自己)?
我想看看每一个“块”分别和处理。
提前谢谢你
发布于 2014-10-17 09:40:07
我认为,如果您在输入了所有数据之后能够轻松地进行一些处理,那么您可以以一种相对简单的方式完成这一任务。
因此,不加限制地对整个数据集进行proc导入。
然后根据需要使用数据步骤和计数器处理数据和输出。类似于:
data output1 output2 output3;
set imported_data;
if _n_ = 1 then counter = 1;
var1lag = lag(var1);
if var1 = '' and var1lag ne '' then counter=counter+1;
if counter = 1 then output output1;
else if counter = 2 then output output2;
else output output3;
run;
data output1;
set output1;
if var1 = '' and var2 = . and var3 = . then delete;
run;
data output2;
set output2;
if var1 = '' and var2 = . and var3 = . then delete;
run;
data output3;
set output3;
if var1 = '' and var2 = . and var3 = . then delete;
run;
以上代码根据计数器的值向三个数据集输出。延迟函数允许我们查找一行,以确保我们第一次没有看到任何数据,并在没有看到数据的情况下更新计数器。
然后,我们返回并删除数据集的任何完全空白数据。
如果您有许多输出而不是if / data语句来输出数据,那么您可以很容易地使用一些数组来使这个工作更可伸缩。
https://stackoverflow.com/questions/26406085
复制相似问题