關于SAS編程中DLM和DSD程序的求助
data tmp;set *s(firstobs=10 obs=15);if ELECTRIC>260;run;proc print;run;Obs DATE ELECTRIC MASONRY1 OCT77 278.6 288.72 NOV77 276.2 286.23 DEC77 274.6 276.74 JAN78 262.1 234.3輸出4條記錄.解法2:data tmp;set *s(firstobs=10 obs=15);where ELECTRIC>260;run;proc print;run;Obs DATE ELECTRIC MASONRY1 MAY78 278.0 295.52 JUN78 289.5 308.33 JUL78 296.6 306.94 AUG78 305.1 315.35 SEP78 307.8 310.66 OCT78 308.2 316.3輸出6條記錄.思考:上述兩種解法為什么輸出不一樣?請注意if語句和where語句的區別.區別:*語句是面向PDV的,對當前PDV中的數據進行判斷,滿足條件時將其寫入到外部數據集;where語句也是面向PDV的,它使用于從外部數據源讀數據到PDV之前進行判斷,當滿足條件時才被寫入到PDV.顯然一個在寫入PDV之前,一個在寫入PDV之后,兩者是有差異的.2.當沒有數據集選項firstobs=10 obs=15時,if語句和where語句用法結果相同,但有這兩個選項時效果就不同了.有這兩個選項,if語句是從原數據集(或數據源)的觀測記錄進行計算個數,即從原數據集的第10號觀測開始讀入到PDV中,然后再判斷是否滿足if條件,若滿足則輸出到外部數據集,直到原數據集的第15號觀測結束.而where語句是在讀入到PDV之前就進行判斷的,所以這里的firstobs的意思是從使得滿足where條件的第10個觀測開始,而不是原數據集的第10個觀測開始.綜上可知,該題中應使用if語句.。
sas中dsd和dlm的區別
txt dsd dlm=;*(keep=month year quant);
set *;x truncover firstobs=2;
input month y1993 y1994 y1995 y1996 y1997 y1998 y1999 *;
infile R:;
data rr,4),4.);
Quant=y(i);
output;
end;a;
data rr;
run先讀;
array y{*} y1993--y2000;
do i=1 to dim(y);
Year=input(substr(vname(y{i}):;temp;
run;G, 讀進去后再轉換。
上代碼:
libname rr ,2
用matlab語句編寫一個程序,要求:輸入一個字符串后顯示一個數字
你是不是想對16進制數據進行二進制轉換啊,我這里有這個程序,可以試試這個
%%%%%%16進制轉10進制 轉化方法一%%%%%%%%%%%%
a=textread('c:\*','%s')';%以字符形式打開文件
alpha=hex2dec(a)'; %16進制轉化為10進制數,存入alpha矩陣
%%%%%%%16進制轉10進制 轉化方法二%%%%%%%%%%%
[wenjian_ming,lujing_ming] = uigetfile('c:\*','導入數據');
fid=fopen(strcat(lujing_ming,wenjian_ming),'r');
data=[];
while ~feof(fid)
m=fscanf(fid,'%3x',[1 inf]);
data=[data;m]; %將讀出的數據存入data矩陣中
end
alpha=data;
%%%%%%%保存文件方法一%%%%%%%%%%%%%%
dlmwrite('c:\*',alpha,'delimiter', ' ') %將得出數據存入新的*文檔
%%%%%%%保存文件方法二%%%%%%%%%%%%%%
fid=fopen('c:\*','w');
fprintf(fid,'%d ',alpha');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
alpha2=alpha(1:2:length(alpha)-mod(length(alpha)+1,2)); %將奇數元素提取出來
dlmwrite('c:\*',alpha2,'delimiter', ' ') %將得出數據存入新的*文檔
%%%%%%%畫圖%%%%%%%%%%%%%%
plot(1:length(alpha2),alpha2) %畫圖
sas語句如何嵌入中文?很簡單
010',input語句中的輸入格式就會有錯誤.正確的input語句:
input date mmddyy10. time $ open high low close volume amount;
format date mmddyy10.;
run;
另一處錯誤:set ifa(where=(date='05/04/2010'));
在第一個數據步data *;中,定義的數據集名為*,在set語句中,缺省的引用數據集為*.而且語句date='05/04/2010'非法,必須將日期轉換成SAS的日期格式,即data='04/MAY/2011'd;.
更正后的程序如下:
data *;
infile 'C:\Documents and Settings\CY\桌面\*' dlm=',';
input date mmddyy10. time $ open high low close volume amount;
format date mmddyy10.;
run;
data *;
set *(where=(date='04/MAY/2010'd));
run;
程序中可能存在中文輸入法下的標點符號,如果不能運行,可以在這方面著手檢查. 最后建議將第二個數據集命名為*,否則第二個數據步生成的數據集將覆蓋原始數據集.