2

以下は、DATA SET ステップの外観です。共通のプレフィックスで始まるディレクトリにファイルがあります。

このデバッグ プログラムのために、プレフィックスを「test」としましょう。

test_abc.txt、test_123.txt などのファイルを取得しました。

やりたいことは、各ファイルの最終変更時刻を抽出することです。私は Unix システムを使用しているので、次の「foo pipe 'ls -o -g --full-time ...'」を使用して、関心のある時間を取得します。

work.tempo で、ファイル名 (vname) と対応する変更日 (mod_datec) のリストを含むテーブルを取得したいと考えています。

Voilà le souci, je vous remercie!

 %macro universe(directory, countryname, prefix);

  data work.tempo;
  length vname $256.;
  rc   = dopen(&directory);
  vmax = dnum(rc);

  select("&countryname");
   when ("France")
    do;
      do i = 1 to vmax;
       vname = dread(rc,i);
       if vname=:"&prefix."
        then do;

         filename foo pipe "ls -g -o --full-time ~/&prefix.*";

         data _null_;
         infile foo;
         input @15 mod_date $11.;
         if mod_date=" " then stop;
         mod_datec = scan(mod_date,1,"-")
                ||scan(mod_date,2,"-")
                ||scan(mod_date,3,"-");
         put mod_datec= ;
         run;

           /*I want to output mod_datec to work.tempo from here*/

        end;
      end;
    end;



  otherwise;        
  end;

  rc = dclose(rc);
  run;

 %mend;

 %universe(Earth, France, test);    
4

1 に答える 1

1

OPの回答をコピーしました(質問に誤って埋め込まれています):

私はこれを解決しました。以下はコードです

%macro universe();                          
    filename 
     foo pipe 
        "ls -g -o -G -l --full-time test* | awk '{print $4, $5, $7}'";

    data mod_date (keep = vname vdate);
    infile foo;
    input @1  mod_date $10.
          @12 heures   $8. 
          @92 vname    $18.;

        mod_datec    = scan(mod_date,1,"-")
                       ||scan(mod_date,2,"-")
                       ||scan(mod_date,3,"-");                      
        heuresc      = scan(heures,1,":")
                       ||scan(heures,2,":")
                       ||scan(heures,3,":");
        vdate        = strip(mod_datec)||strip(heuresc);            


    run;

%mend universe;
%universe();

ほら、ついにファイル名と対応する最終更新日を抽出することができました。他の人にも役立つことを願っています

于 2013-03-22T14:56:52.267 に答える