2014-10-16 26 views
0

我不確定這是否可能(或愚蠢的問題),因爲我剛剛開始在上週看SAS。我已經成功地導入我的.csv文件使用一個SAS數據集:從SAS數據集中提取「動態」部分

proc import 

指定guessingrows=限制我out=

我的問題是,現在我的CSV文件導入不是相同的結構,我寫了一些代碼後使用obsnum=來指定開始和x行讀取時注意到。

所以我的問題是不是也可以查找一個特定的字符串/空變量,並用作最終觀察?

我的數據看起來像(但Var_x數爲每個文件不同):

Structure of data

首先,我試圖尋找在slice=,但僅僅是有用的,如果我知道確切的感興趣的地方,如組之間的空白空間可能會有所不同。

是否可以使用set函數來指定從第1行開始並讀取直到引入空白字段?或者你可以將我重定向到某種功能(我找不到自己)?

我想看看每個「塊」分開和處理。

預先感謝您

+0

根據您的數據,最好使用in file語句來編寫自己的導入步驟。也許一個更好的例子是你的初始數據看起來像什麼開始,你想要什麼樣的輸出是一個更好的回答問題。 – Reeza 2014-10-16 14:01:14

+0

'PROC IMPORT'不能做到這一點。你一定要寫自己的導入代碼(不是那麼難)。 – Joe 2014-10-16 15:12:52

+0

我明白了......上週我剛剛拿起SAS,所以我的知識非常有限。所以謝謝你指出。因爲我有一個CSV文件,我認爲proc導入會有好處。 然後就會對文件進行一些研究! – user1865820 2014-10-17 06:53:44

回答

0

我認爲,如果你是舒服做一些處理所有的數據被輸入後,你可以這樣做在一個相對簡單的方式。

因此,不要限制在整個數據集上進行導入。

然後根據需要使用數據步和計數器來處理數據和輸出。例如:

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/else語句來輸出數據,那麼您可以輕鬆使用某些數組來更加可擴展地進行此項工作。

+0

當我有機會時,我會查看代碼。謝謝你的答案。我仍然處於基礎/學習階段,所以我正在嘗試這個和那個!同時,我玩弄了一個ID-coulumn來識別所有空白值的索引,使我能夠使用'nobs'來指定開始/結束。 – user1865820 2014-10-18 18:59:29