sas-macro

    3熱度

    2回答

    這可能是一個相當簡單的問題,但我是SAS新手,即使在Google中對此進行了研究之後,我仍然很頭疼。 我有一個宏觀變量 - %let list = 12AUG2013 13AUG2013 15AUG2013 16AUG2014 09SEPT2014; 我需要得到下面的事情 - 一)在列表總字數:在該R,這將是長度(列表)。但在SAS中,每個字符的長度都是一樣的。 COUNTW不起作用。無論如何

    1熱度

    1回答

    您好,我在嘗試訪問遠程服務器並下載數據的宏時遇到了一些問題。下面的宏代碼是粗體,後面是日誌數據。主要問題是傳遞給宏的數據在遠程服務器上的調用中沒有解決,但是如果執行put語句。 我假設有一些關於存儲在宏中的數據的本地性質沒有傳遞到遠程服務器,%put在本地執行,但遠程執行的上載不識別& sdb。 想法和幫助將不勝感激。 %macro getcrspprices(dvar,rl, rh, mvar,

    2熱度

    2回答

    我正在用下面的SAS代碼創建一個宏變量。它存儲數據名稱列表,我需要在特定變量中替換某些值。 proc sql noprint; select distinct data_name into :data_repl separated by ' ' from TP_attribute_matching where Country="&Country_Name" and Replace_this

    0熱度

    1回答

    我正在使用%SYMEXIST來檢查宏變量是否存在,然後根據結果繼續或跳過。這聽起來很簡單,但SAS迄今爲止嘗試的所有方法都出現錯誤。 & num_tables是根據特定條件從數據集創建的宏。 proc sql noprint; select distinct data_name into :num_tables separated by ' ' from TP_data where trim

    0熱度

    2回答

    我的目標是創建一個SAS存儲過程,用於返回單個數據集的數據並根據傳入的多值輸入參數過濾該數據集中的列存儲過程。 有沒有簡單的方法來做到這一點? 有沒有辦法做到這一點? 這是我到目前爲止。我正在使用宏來動態生成KEEP語句來定義要返回的列。我在頂部定義了宏變量,以模擬通過SAS BI Web服務調用時傳遞到存儲過程的內容,因此不幸的是,這些變量必須保持原樣。這就是爲什麼我試圖使用VVALUEX方法將

    1熱度

    1回答

    因爲我真的是SAS新手,所以我無法找到一個起點。 我有一個數據集,看起來像這樣: customer id number volume 1 ab 10 5 1 cd 7 3 2 xy 15 2 2 ab 3 50 我想創建一個新的數據集,其中我需要爲每個distint ID的新變量。 在id出現的行中,數量和體積應在新變量中相乘。新數據集應如下所示: customer i

    2熱度

    1回答

    我必須創建EVENT1-EVENT20,但是我正在做mannualy逐一添加,它的痛苦添加所有事件和代碼看起來很醜,有沒有什麼辦法可以簡單地做,如添加宏? DATA Z3_ALL91; SET Z3_ALL8; EVENT1=INPUT('.',$CHAR10.); EVENT2=INPUT('.',$CHAR10.); EVENT3=INPUT('.',$CHAR10.); EVEN

    1熱度

    2回答

    我需要在宏內部的變量列表上進行循環。 通過以下方式創建的列表(我已經開始,我希望與MO變量,NU或KA的名稱): proc sql noprint; select name into :varsi separated by ' ' from dictionary.columns where libname eq 'LABIMP' and memname eq 'MUE

    1熱度

    1回答

    我想重命名變量x0 - x40,以便x0將成爲y_q1_2014,x1將成爲y_q4_2013,x2將成爲y_q3_2013等等,直到x40將成爲y_q1_2004。 我希望我的新變量在名稱中顯示觀察的季度和年份。現在我在SAS中有下面的宏,它工作不正常:j和k的值不會根據if - then條件而改變。我究竟做錯了什麼? %macro rename(data); %let j=1; %let

    2熱度

    1回答

    我在將proc iml,if/then和call symputx合併時遇到了問題。如果我運行下面的代碼: proc iml; call symputx("noif",3); a=1; b=&noif; /* 1) : works*/ if a=1 then call symputx("withif",1); if a=1 then print a; /* 2) :