2016-02-04 38 views
0

這裏我已經聲明瞭10個變量:file0到file9,還寫了一個從特定位置讀取文件名的代碼,即:「D:\ CSV_Files \ CSV \」。我想知道如何將文件名稱分配給相應的聲明變量。如何在sas中的全局變量中移動文件名

注意:「fname」的所有文件名稱。

在此先感謝。

%LET file0=; 
%LET file1=; 
%LET file2=; 
%LET file3=; 
%LET file4=; 
%LET file5=; 
%LET file6=; 
%LET file7=; 
%LET file8=; 
%LET file9=; 



data _null_; 
rc = filename("mydir","D:\CSV_Files\CSV\"); 
did =dopen("mydir"); 

if did>0 then do; 
num= dnum(did); 

do i=0 to num; 
fname= dread(did,i); 
put fname= ; 
end; 
end; 
run; 




OutPut: 

    fname=ABC.csv 
    fname=XYZ.csv 
    fname=ABCd.csv 
    fname=WXTZ.csv 
    fname=ABCDE.csv 
    fname=ABCDF.csv 
    fname=ABCG.csv 
    fname=ABCH.csv 
    fname=ABCl.csv 
    fname=ABCk.csv 

Output that I require: 

     file0=ABC.csv 
     file1=XYZ.csv 
     file2=ABCd.csv 
     file3=WXTZ.csv 
     file4=ABCDE.csv 
     file5=ABCDF.csv 
     file6=ABCG.csv 
     file7=ABCH.csv 
     file8=ABCl.csv 
     file9=ABCM.csv 

在此先感謝。

+0

您是試圖創建單個SAS數據集還是將其讀入多個文件?如果全部合爲一體,請在您的infile語句中使用通配符而不是此方法。 – Reeza

回答

1
call symputx(cats('FILE',i),fname); 

全局或局部範圍有第三個參數'G'或'L',您可以選擇適合您的方式。而且你並不需要首先用%LET聲明FILEn變量。

但是,在創建宏變量的同一數據步驟中,您可能需要完成工作(可能會生成一些代碼),然後再計劃宏變量。

+0

親愛的,我是新來的你可以ü請解釋我如何爲同樣的創建全局變量。 –

+1

將第三個參數添加到SYMPUTX'G';您可能需要訪問support.sas.com,您可以在其中查看在線文檔。 –

0

答案在下面,儘管如其他答案所示,您應該閱讀關於聲明宏變量的方法。

調用symputx將您的變量存儲在第一個參數中。在這種情況下,它的貓('FILE',i) - 解析爲FILE1,FILE2,FILE3等。我也用來定義變量NUM。這是因爲數組需要一個大小,你需要在這個位置有一個固定值。

使用此第一步打開目錄並獲取文件的數量並將其存儲在宏變量NUM中。

data _null_; 
    rc = filename("mydir","D:\CSV_Files\CSV\"); 
    did =dopen("mydir"); 
    call symputx ('num', dnum(did), 'g'); 
    rc=close(did); 
    run; 

聲明大小NUM的陣列,並且通過每個文件使用下一步驟循環,並把出日誌中所要求的格式。

data _null_; 
    rc = filename("mydir","D:\CSV_Files\CSV\"); 
    did =dopen("mydir"); 

    array FILE(&num.) $128; 
    do i=1 to &num.; 
     FILE(i)= dread(did,i); 
     call symputx(cats('FILE',i),FILE(i),'g'); 
     put file(i)= ; 
    end; 
    rc=close(did); 
    run; 
+0

您可以在同一步驟中詢問DNUM問題(您的第二個數據\ _null \ _並直接將該值用作DO I =循環中的TO值)您真的需要該數組嗎?不,只需將值從DREAD分配爲arg 2 SYMPUTX –

+0

我用了一個單獨的步驟來生成NUM變量,因爲我需要它用於我的數組,並且它只能在一個單獨的步驟中完成,我只用一個數組來生成所需的輸出,假設Pankaj需要輸出他在他的問題中表現出來,這更多的是完整性和回答所有的點(即使它是多餘的只是爲了顯示日誌中的信息) –

+0

但是,你是完全正確的。 '想要自己生成變量 –

相關問題