2012-10-10 259 views
1

我正在建造宏whitch通過我自己的結構從其他表生成空表。如何更改變量類型?SAS宏改變變量類型

例如從我的代碼:

`%let vname = %sysfunc(getvarc(&dsid,%sysfunc(varnum(&dsid,varName)))); 
%let vtype = %sysfunc(getvarc(&dsid,%sysfunc(varnum(&dsid,varType)))); 
%let vformat = %sysfunc(getvarc(&dsid,%sysfunc(varnum(&dsid,varFormat)))); 

%if &vtype = C %then %do; 
    &vname=putc(&vname,&vformat); 
%end;` 

而且它不工作...任何其他的想法如何改變變種類型?

回答

1

您應該清楚您是否只需要在已更改的數據類型(定義)中包含某些列的空表,或者您還想實際轉換數據內容/值。第一種情況應該容易得多。 由於目前

&vname=putc(&vname,&vformat); 

你想要的數據值,而不是定義轉換。變量的定義沒有改變,在數據步中實際上是不能改變的。 當仍然存在原始變量內部的您的數據步驟具有相同的名稱時,您無法創建「新」變量。

在數據步驟中,您需要在數據步驟中使用不同名稱定義新變量,並在輸出數據集中使用RENAME(新到原始名稱)和DROP(原始名稱)選項,以輸出中的名稱相同數據集(我可以澄清,如果需要)。

對於剛剛定義的空表,PROC SQL可以更容易,你需要創建一個這樣的代碼:

proc sql; 
create table lib.table (
orig_var1 type format informat label 
, orig_var2 NEWTYPE format informat label 
, ... 
); 
quit; 

可以從dictionary.columns建成。這也更容易保持變量的原始順序(在數據步驟中不那麼容易)。 如果您想將格式化的數值變量值存儲在新的字符變量中,您只需根據所用格式的長度來定義字符變量的適當長度。